n 개의 개수만큼 Grouping & 집계 0 2 2,150

by 과부화개발자 [SQL Query] GROUP ORACLE [2019.12.16 17:30:48]


안녕하세요,

 

요즘 집계함수를 본의아니게 엄청나게 공부하고 있습니다..

구루비 덕분에 GROUPONG SETS..ROLLUP 등등 많이 배웠습니다 요즘 (__)

간만에 글을 쓰네요. 다름이 아니라 

        WITH TEMP AS (
select 9 AS NO,'CCT' AS NAME, '10000' AS MONEY FROM DUAL UNION ALL
select 13 AS NO,'BAC' AS NAME, '20000' AS MONEY FROM DUAL UNION ALL
select 15 AS NO,'SCX' AS NAME, '40000' AS MONEY FROM DUAL UNION ALL
select 14 AS NO,'WDF' AS NAME, '50000' AS MONEY FROM DUAL UNION ALL
select 22 AS NO,'HFS' AS NAME, '70000' AS MONEY FROM DUAL
) SELECT * FROM TEMP;

위와 같은 데이터가 있을 때, (총 5개의 행이죠)

예를들어 2개씩 묶어서 소계를 보여주고, 총계도 같이 보여주고 싶다 하면 쿼리를 어떻게 짜야 할까요?

2개씩 묶을수도 있고, 3개씩 묶을수도 있고...가변적 입니다.

지금은 group 묶어주는 column을 따로 생성해주는 function을 만들어서 grouping 하는 방식으로 접근 중에 있었습니다.

답변 감사합니다.

by 마농 [2019.12.17 08:04:25]
WITH temp AS
(
SELECT 9 no, 'CCT' name, 10000 money FROM dual
UNION ALL SELECT 13, 'BAC', 20000 FROM dual
UNION ALL SELECT 15, 'SCX', 40000 FROM dual
UNION ALL SELECT 14, 'WDF', 50000 FROM dual
UNION ALL SELECT 22, 'HFS', 70000 FROM dual
)
SELECT no
     , DECODE(GROUPING_ID(gb, no), 0, name, 1, '소계', 3, '총계') name
     , SUM(money) money
  FROM (SELECT no, name, money
             , CEIL(ROW_NUMBER() OVER(ORDER BY no) / :n) gb
          FROM temp
        )
 GROUP BY ROLLUP(gb, (no, name))
 ORDER BY gb, no
;

 


by 과부화개발자 [2019.12.17 09:09:10]

고맙습니다

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