혹시 이런 조건별 집계를 함수만 가지고 처리 가능한가요? 오라클 0 2 2,501

by 최성호 [SQL Query] [2023.09.19 09:30:01]


이런 구조의 테이블이 있습니다.

 

칼럼1  |   칼럼2

 a        |     10

  a       |      20

b        |        10

c        |        30

d        |       40

 

여기서 전체 합계와 a, b  의 소계만 구해해서

 

칼럼 1   |   칼럼2

합계      |    110

  a         |     10

  a        |     20

  b         |   10

 (a+b) 소계 |    40

   c         |    30

   d        |     40

   이런 형태로 조회해보고 싶습니다. 

   소계를 마지막에 별도로 구해서 union 하는 방법도 있겠지만

  집계함수만을 통해서 좀 더 깔끔하게 처리하는 방법이 있을까요?

 

by 마농 [2023.09.19 13:13:22]
WITH t AS
(
SELECT 1 id, 'a' cd, 10 v FROM dual
UNION ALL SELECT 2, 'a', 20 FROM dual
UNION ALL SELECT 3, 'b', 10 FROM dual
UNION ALL SELECT 4, 'c', 30 FROM dual
UNION ALL SELECT 5, 'd', 40 FROM dual
)
SELECT COALESCE(cd, gb, '합계') cd
     , SUM(v) v
  FROM (SELECT id, cd, v
             , CASE WHEN cd IN ('a', 'b') THEN '(a+b)소계' ELSE 'etc' END gb
          FROM t
        )
 GROUP BY ROLLUP(gb, (id, cd))
HAVING NOT(NVL(gb, 'x') = 'etc' AND GROUPING(cd) = 1)
 ORDER BY gb NULLS FIRST, id
;

 


by 최성호 [2023.09.19 14:58:58]

감사합니다. group by 키를 하나더 만들어서... 감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입