1. 분석함수 중첩사용은 안됩니다. 2. Alias 는 같은 Select 내에서는 사용안됩니다. 인라인뷰를 이용하면 안에서 정의한 별칭을 밖에서 사용은 가능하죠. 위에서도 인라인뷰를 이용해 분석함수 두번 돌렸네요. 마찬가지로 한번 더 감싸서 세번 돌리시면 되긴하겠죠. 3. 그러나 문제는 그게 아닙니다. 쿼리가 논리적으로 모순이 많네요. 안에서 분석함수로 합계를 구하고 rn = 1 만 가져온 부분은... 분석함수를 사용할 부분이 아니라 집계함수를 사용했어야 하는 부분입니다.
1 2 3 4 5 6 | SELECT year , month , shop , SUM (tot_amt) sum_amt FROM og_ods_order_aggregation_ljj WHERE base_date BETWEEN '20111201' AND '20121201' GROUP BY year , month , shop ; |
4. 분석함수안에서 집계함수 사용이 가능하므로 서브쿼리를 좀 줄여보겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | SELECT year , month , shop , sum_val , pre_month , sum_val - pre_month "전월대비실적" , RANK() OVER( ORDER BY sum_val - pre_month DESC ) rk FROM ( SELECT year , month , shop , SUM (tot_amt) sum_val , LAG( SUM (tot_amt)) OVER(PARTITION BY shop ORDER BY year , month ) pre_month FROM og_ods_order_aggregation_ljj WHERE base_date BETWEEN '20111201' AND '20121201' GROUP BY year , month , shop ) ; |