GROUP FUNCTION 의 3가지 ROLLUP, CUBE, GROUPING SETS
1. 소그룹 간의 소계를 계산하는 ROLLUP,
2. 다차원적인 소계를 계산하는 CUBE,
3. 특정항목에 대한 소계를 계산하는 GROUPING SETS 함수 총 3가지가 있습니다.
ROLLUP과 GROUPING SETS의 차이점?
오라클에서 소계, 합계, 총계의 쿼리(SQL)를 작성할 때는 ROLLUP을 많이 사용한다.
ROLLUP의 경우 나열된 컬럼의 단계별로 소계, 합계를 자동으로 집계를 한다.
그에 반해 GROUPING SETS는 여러 그룹핑 쿼리를 UNION ALL 한 것과 같은 결과를 만들 수 있어 조금 더 유연하게 소계, 합계를 집계할 수 있다.
SELECT job , deptno , COUNT(*) cnt FROM emp GROUP BY GROUPING SETS((job, mgr), (job, deptno), ()) |
GROUPING SETS( 컬럼, 컬럼, 컬럼, ... )
GROUPING SETS( (컬럼그룹), (컬럼그룹), (컬럼그룹), ... )
그룹핑셋은 소계를 내는 함수가 아닙니다.
그룹핑에 대해서 개별적인 합계를 내어주고, 이를 UNION 해준것과 같은 결과를 냅니다.
COL1 기준 합, COL2 기준 합을 구해서 UNION하기 때문에, CUBE와 같은 총계를 낼수없습니다.
특정 하나의 컬럼을 기준으로 묶어 Aggregation (sum avg count 등) 함수를 사용하는데 이용합니다.
<ROLLUP>
ROLLUP함수는 소그룹간의 합계를 계산하는 함수입니다.
ROLLUP을 사용하면 GROUP BY로 묶은 각각의 소그룹 합계와 전체 합계를 모두 구할 수 있습니다.
SELECT 상품ID, 월, SUM(매출액) AS 매출액
FROM 월별매출
GROUP BY ROLLUP(상품ID, 월);
<CUBE>
CUBE함수는 항목들 간의 다차원적인 소계를 계산합니다.
ROLLUP과 달리 GROUP BY절에 명시한 모든 컬럼에 대해 소그룹 합계를 계산해줍니다.
SELECT 상품ID, 월, SUM(매출액) AS 매출액
FROM 월별매출
GROUP BY CUBE(상품ID, 월);
<GROUPING SETS>
GROUPING SETS는 특정 항목에 대한 소계를 계산하는 함수입니다.
SELECT 상품ID, 월, SUM(매출액) AS 매출액
FROM 월별매출
GROUP BY GROUPING SETS(상품ID, 월);
앞의 ROLLUP, CUBE에 비해 훨씬 결과가 단순합니다.
ROLLUP과 CUBE는 GROUP BY 결과에 소그룹 합계와 토탈 합계를 보여주지만
GROUPING SETS는 각 소그룹별 합계만 간단하게 보여줍니다.
GROUPING SETS 함수는 각각의 컬럼으로 GROUP BY한 값을 UNION ALL 한 것과 동일한 결과를 보여줍니다.
<GROUPING >
GROUPING은 직접적으로 그룹별 집계를 구하는 함수는 아니지만 위의 집계함수들을 지원하는 함수입니다.
집계가 계산된 결과에 대해서는 1의 값을 갖고 그렇지 않은 결과에 대해서는 0의 값을 갖습니다.
SELECT
CASE GROUPING(상품ID) WHEN 1 THEN '모든 상품ID' ELSE 상품ID END AS 상품ID,
CASE GROUPING(월) WHEN 1 THEN '모든 월' ELSE 월 END AS 월,
SUM(매출액) AS 매출액
FROM 월별매출
GROUP BY ROLLUP(상품ID, 월);
'주니어 기초 코딩공부 > Database 기초' 카테고리의 다른 글
Error Code: 2013. Lost connection to MySQL server during query (1) | 2023.10.10 |
---|---|
오라클 데이터 삭제(DELETE, TRUNCATE) (0) | 2023.06.08 |
오라클 맥북 프로 m2 scott 계정 생성하기 (0) | 2023.02.17 |
[데이터베이스] 커넥션 풀 Connection Pool (feat. mySQL) (0) | 2023.01.26 |
맥북 오라클 설치 방법 SQLDeveloper & DOCKER & Colima (0) | 2023.01.21 |