by 정진우 [SQL Query] ROLLUP GROUP BY [2014.10.30 15:44:36]
안녕하세요. 오랜만에 인사드립니다.
SQL을 작성하고 있는데 의문이 하나 들어서요. ^^
원하는 결과는 이것입니다.
구분 | 갯수 | 합계 |
A | 5 | 9 |
B | 4 | 9 |
위와 같은 결과를 얻는 방법에 대해서 궁금해서 질문을 올립니다.
우선 테스트 해본 방법은
WITH T AS( SELECT "A" PROD FROM DUAL UNION ALL SELECT "A" PROD FROM DUAL UNION ALL SELECT "A" PROD FROM DUAL UNION ALL SELECT "A" PROD FROM DUAL UNION ALL SELECT "B" PROD FROM DUAL UNION ALL SELECT "B" PROD FROM DUAL UNION ALL SELECT "B" PROD FROM DUAL UNION ALL SELECT "B" PROD FROM DUAL UNION ALL SELECT "A" PROD FROM DUAL UNION ALL SELECT "A" PROD FROM DUAL UNION ALL SELECT "A" PROD FROM DUAL ) SELECT DISTINCT PROD, , COUNT(PROD) OVER() AS ALL , COUNT(PROD) OVER(PARTITION BY PROD) AS PART FROM T
위와같이 작성하는 방법으로는 가능한데 이렇게도 사용하는게 맞는지 ..
실제 활용도가 있는 쿼리있지 궁금하기도 하구요.... (Advanced SQL 강좌의 마농님 강좌를 보았습니다.)
저기엔 중복되는 노출을 안하려고 DISTINCT 를 사용했는데요.
ROLLUP을 사용하면
SELECT PROD , COUNT(PROD) FORM T GROUP BY ROLLUP(PROD)
합계부분이 최하단에 위치하자나요 ? 주로 DECODE(PROD, NULL, 'TOT', PROD)이런식으로 사용하구요 .
그런데 화면에 실제보여줘야하는건, COUNT(PROD) = 소계 값이랑 , 총계 값이 같은 ROW에 보여주어야하거든요.
ROLLUP으로는 불가능한가요 ?? ( COUNT(PROD) OVER(), COUNT(PROD) OVER(PARTITION BY GROUPING_ID(PROD)) ) 이런식으로 다 해보았지만
이미 GROUP BY 절서부터 .. PROD 로 나뉜거라서 총계를 옆에 위치시킬수가 없더라구요.
다르게 조회하는 방법이 있다면 팁좀 알려주시면 감사하겠습니다. ㅠ