[SQLD]「2」(2.5) ROLLUP/CUBE/GROUPING SETS/GROUPING
「1」 데이터 모델링의 이해
> 「2」 SQL 기본 / 활용
「3」 관리 구문
1. 서브쿼리
2. 뷰
3. 집합 연산자
> 4. 소계(총계) 함수
5. 윈도우 함수
6. Top-N 쿼리
7. 셀프 조인
8. 계층 쿼리
4. 소계(총계) 함수
소계(총계) 함수
⸰ 소계(총계) 함수 :ROLLUP
CUBE
GROUPING SETS
등
ROLLUP
⸰ 소그룹 간 소계 / 총계를 일방향으로 계산하는 함수
√. 인수의 순서가 바뀌면 다른 결과 출력
- ROLLUP(A) :(A)
총합계
- ROLLUP(A, B) :(A, B)
(A)
총합계
- ROLLUP(A, B, C) :(A, B, C)
(A, B)
(A)
총합계
- ROLLUP((A, B), C) :(A, B, C)
(A, B)
총합계
SELECT 칼럼명1, 칼럼명2, 칼럼명3, COUNT(*)
FROM 테이블명
GROUP BY ROLLUP(칼럼명1, 칼럼명2, 칼럼명3)
ORDER BY 칼럼명1;
칼럼명1 | 칼럼명2 | 칼럼명3 | COUNT(*) |
데이터1 |
데이터2 |
데이터3 |
COUNT |
데이터1 |
데이터2 |
NULL | COUNT |
데이터1 |
NULL | NULL | COUNT |
NULL | NULL | NULL | COUNT |
CUBE
⸰ 소그룹 간 소계 / 총계를 모든 그룹으로 계산하는 함수
√. 인수의 순서가 바뀌어도 같은 결과 출력
- CUBE(A) :(A)
총합계
- CUBE(A, B) :(A, B)
(A)
(B)
총합계
- CUBE(A, B, C) :(A, B, C)
(A, B)
(A, C)
(B, C)
(A)
(B)
(C)
총합계
- CUBE((A, B), C) :(A, B, C)
(A, B)
(C)
총합계
SELECT 칼럼명1, 칼럼명2, 칼럼명3, COUNT(*)
FROM 테이블명
GROUP BY CUBE(칼럼명1, 칼럼명2, 칼럼명3)
ORDER BY 칼럼명1;
칼럼명1 | 칼럼명2 | 칼럼명3 | COUNT(*) |
데이터1 |
데이터2 |
데이터3 |
COUNT |
데이터1 |
데이터2 |
NULL | COUNT |
데이터1 |
NULL | 데이터3 |
COUNT |
NULL | 데이터2 |
데이터3 |
COUNT |
데이터1 |
NULL | NULL | COUNT |
NULL | 데이터2 |
NULL | COUNT |
NULL | NULL | 데이터3 |
COUNT |
NULL | NULL | NULL | COUNT |
GROUPING SETS
⸰ 특정 항목에 대한 소계를 계산하는 함수
⸰ 인자값으로 ROLLUP, CUBE 사용 가능
√. 인수의 순서가 바뀌어도 같은 결과 출력
- GROUPING SETS(A, B) :(A)
(B)
- GROUPING SETS(A, B, ( )) :(A)
(B)
총합계
- GROUPING SETS(A, B, ROLLUP(C)) :(A)
(B)
(C)
총합계
- GROUPING SETS(A, ROLLUP(B, C)) :(A)
(B, C)
(B)
총합계
- GROUPING SETS(CUBE(A, B), C) :(A, B)
(A)
(B)
(C)
총합계
SELECT 칼럼명1, 칼럼명2, 칼럼명3, COUNT(*)
FROM 테이블명
GROUP BY GROUPING SETS(칼럼명1, 칼럼명2, 칼럼명3)
ORDER BY 칼럼명1;
칼럼명1 | 칼럼명2 | 칼럼명3 | COUNT(*) |
데이터1 |
NULL | NULL | COUNT |
NULL | 데이터2 |
NULL | COUNT |
NULL | NULL | 데이터3 |
COUNT |
GROUPING
⸰ 그룹핑의 기준이 되는 칼럼을 제외하고 표현된 NULL 값에 원하는 텍스트를 출력
⸰ 소계가 계산된 행 :1
, 나머지 행 :0
⸰ ROLLUP, CUBE, GROUPING SETS 등과 함께 쓰임
SELECT 칼럼명1, GROUPING(칼럼명1), COUNT(*)
FROM 테이블명
GROUP BY ROLLUP(칼럼명1)
ORDER BY 칼럼명1;
칼럼명1 | GROUPING(칼럼명1) | COUNT(*) |
데이터1 |
0 |
COUNT |
NULL | 1 |
COUNT |
⸰ CSAE 문 / DECODE 문을 이용하여 원하는 텍스트 출력 가능
SELECT CASE GROUPING(칼럼명1)
WHEN 1 THEN 'TOTAL' ELSE 칼럼명1
END AS 칼럼명1,
COUNT(*)
FROM 테이블명
GROUP BY ROLLUP(칼럼명1)
ORDER BY 칼럼명1;
SELECT DECODE(GROUPING(칼럼명1, 1, 'TOTAL', 칼럼명1) AS 칼럼명1,
COUNT(*)
FROM 테이블명
GROUP BY ROLLUP(칼럼명1)
ORDER BY 칼럼명1;
칼럼명1 | COUNT(*) |
데이터1 |
COUNT |
TOTAL |
COUNT |
유선배 SQLD 과외노트
'💠기타 > 자격증' 카테고리의 다른 글
[SQLD]「2」(2.7) FIRST_VALUE/LEAD, RATIO_TO_REPORT/CUME_DIST/NTILE (0) | 2024.06.21 |
---|---|
[SQLD]「2」(2.6) RANK, MAX/AVG/SUM, WINDOWING 절 (0) | 2024.06.20 |
[SQLD]「2」(2.4) 서브쿼리, 뷰, 집합 연산자 (0) | 2024.06.19 |
[SQLD]「2」(2.3) JOIN, STANDARD JOIN (1) | 2024.06.18 |
[SQLD]「2」(2.2) WHERE 절, GROUP BY 절/HAVING 절, ORDER BY 절 (0) | 2024.06.17 |