pajama, 마농님 답변 감사드립니다.
id | level | power |
1 | 10 | 100 |
2 | 20 | 200 |
3 | 30 | 300 |
4 | 40 | 400 |
5 | 50 | 500 |
6 | 60 | 600 |
7 | 70 | 700 |
8 | 80 | 800 |
9 | 90 | 900 |
10 | 100 | 1000 |
level 30이상 id의 power 평균(id 8개)
level 50이상 id의 power 평균(id 6개)
div_level | avg_power |
30이상 | 650 |
50이상 | 750 |
union all, pivot 없이 가능할까요?
http://www.gurubee.net/article/83881
마농님이 답변 주신 SUM(COUNT(*)) OVER(ORDER BY div_value) 이게 누적 합을 구하는 거 같은데
저거랑 비슷하게 짜보려 했는데 제대로 이해를 못 했는지 쉽지 않네요 ㅠ
어떻게 만들긴 했는데..^^; 다른 방법이 있을것도 같고..
with t as ( select 1 id, 10 lv, 100 power from dual union all select 2, 20, 200 from dual union all select 3, 30, 300 from dual union all select 4, 40, 400 from dual union all select 5, 50, 500 from dual union all select 6, 60, 600 from dual union all select 7, 70, 700 from dual union all select 8, 80, 800 from dual union all select 9, 90, 900 from dual union all select 10, 100, 1000 from dual ) select case when a.div_level is null then b.div_level else a.div_level end div_level, case when a.avg_power is null then b.avg_power else a.avg_power end avg_power from (select '30이상' div_level, avg(power) avg_power from t where lv >= 30) a full outer join (select '50이상' div_level, avg(power) avg_power from t where lv >= 50) b on a.div_level = b.div_level
level 이나 power 와 같은 예약어를 명칭으로 사용하는 것은 좋지 않습니다. 다른명칭을 사용하세요.
union all, unpivot 등을 사용하지 말아야 한다는 제약을 두는 것은 좋지 않습니다.
해당 제약으로 인해 더 좋은 답변을 달지 못할 수도 있습니다.
지난번 답변을 보면 union all 은 사용이 안되었던데요?
with 문 안의 union all 을 일일이 기술해 줘야 한다고 오해하신 듯 하네요.
with 문은 테스트용 보조역할을 할 뿐입니다. 중요한게 아닙니다. with 문 아래쪽 쿼리문의 작성 스타일을 보세요.
WITH t AS ( SELECT 1 id, 10 lv, 100 pw FROM dual UNION ALL SELECT 2, 20, 200 FROM dual UNION ALL SELECT 3, 30, 300 FROM dual UNION ALL SELECT 4, 40, 400 FROM dual UNION ALL SELECT 5, 50, 500 FROM dual UNION ALL SELECT 6, 60, 600 FROM dual UNION ALL SELECT 7, 70, 700 FROM dual UNION ALL SELECT 8, 80, 800 FROM dual UNION ALL SELECT 9, 90, 900 FROM dual UNION ALL SELECT 10, 100, 1000 FROM dual ) SELECT a.lv || '이상' div_level , AVG(b.pw) avg_power FROM (SELECT 30 lv FROM dual UNION ALL SELECT 50 FROM dual ) a , t b WHERE a.lv <= b.lv GROUP BY a.lv ;