일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- null
- 도전
- where절
- 직장인일기
- 인덱스
- 보울룸
- constraint
- 책리뷰
- 데이터모델링
- Drop
- 일기
- SQL
- 30일챌린지
- ERD
- data
- 빅데이터
- 30일글쓰기
- 테이블삭제
- 회사생활
- 전생
- 넷플릭스
- 환생
- Update
- INSERT
- 직장생활
- 홈트
- 회사싫어
- ROWNUM
- SQLD
- rename
- Today
- Total
최보름달
[SQL] 그룹 함수 Group Function (ROLLUP, CUBE, GROUPING SETS) 본문
분석 함수
SQL 표준은 데이터 분석을 위해 다음 세 가지 함수를 정의하고 있다.
- AGGREGATE FUNCTION
- GROUP FUNCTION
- WINDOW FUNCTION
AGGREGATE FUNCTION
GROUP AGGREGATE FUNCTION 라고도 부르는 그룹 함수의 한 부류이다.
COUNT, SUM, AVG, MAX, MIN 등이 포함되어 있다.
GROUP FUNCTION
리포트를 작성할 때 사용하기 좋은 함수이다.
소계, 중계, 합계, 총 합계 등을 구할 수 있다.
소그룹 간의 소계를 계산하는 ROLLUP, GROUP BY, 다차원적 소계를 할 수 있는 CUBE, 특정 항목의 소계를 할 수 있는 GROUPING SETS 함수가 있다.
WINDOW FUNCTION
분석 함수 (ANALYTIC FUNCTION)나 순위 함수 (RANK FUNCTION) 로도 알려져 있다.
ROLLUP
ROLLUP 에 지정된 그룹핑 컬럼이 N개 라고 하면 N+1 의 subtotal 이 생성된다.
계층구조라서 인수 순서가 바뀌면 결과도 바뀌게 되므로 주의!
SELECT DNAME, JOB, COUNT(*) "TOTAL EMPL", SUM(SAL) "TOTAL SAL"
FROM EMP, DEPT
WHERE DEPT.DEPTNO = EMP.DEPTNO
GROUP BY ROLLUP (DNAME, JOB)
그룹핑 컬럼인 DNAME, JOB에 대해서 다음과 같은 LEVEL의 추가 집계가 생성된다.
- L1 - 그룹 바이 수행시 성생되는 표준 집계
- L2 - DNAME 별 모든 JOB의 SUBTOTAL
- L3 - GRAND TOTAL
롤업의 경우 계층 간 집계에 대해서는 레벨별 순서를 정렬하지만,
계층 내 그룹 바이 수행 시 생성되는 표준 집계에 대해서는 별도 정렬을 지원하지 않는다.
정렬을 원하면 ORDER BY를 사용하자.
GROUPING
ROLLUP, CUBE, GROUPING SETS와 함께 사용할 수 있는 함수.
ROLLUP 이나 CUBE 에 의한 소계가 계산된 결과에는 GROUPING(expr) = 1 이 표시되고
그 외 결과에는 GROUPING(expr) = 0 이 표시된다.
SELECT DNAME, GROUPING(DNAME),
JOB, GROUPING(JOB),
COUNT(*) "TOTAL EMPL",
SUM(SAL) "TOTAL SAL"
FROM EMP, DEPT
WHERE DEPT.DEPTNO = EMP.DEPTNO
GROUP BY ROLLUP (DNAME, JOB)
GROUPING(DNAME), GROUPING(JOB) <- 요 컬럼에 0이면 집계값이 아니다, 1이면 집계값이다를 표시해준다.
JOB과 MGR는 하나의 집합으로 간주하고, 부서별, JOB & MGR 에 대한 ROLLUP 결과를 출력하는 예제
SELECT DNAME,
JOB,
MGR,
SUM(SAL) "TOTAL SAL"
FROM EMP, DEPT
WHERE DEPT.DEPTNO = EMP.DEPTNO
GROUP BY ROLLUP (DNAME, (JOB, MGR)) ;
-- JOB, MGR을 소계 시 하나의집합으로 간주함.
CUBE
CUBE는 결합 가능한 모든 값에 대해서 다차원 집계를 생성한다.
그룹핑 컬럼의 수가 N 개 라면 2의 N승만큼 subtotal을 생성한다.
ROLLUP에 비해 연산 대상이 많으므로 주의하자.
GROUP BY ROLLUP 처럼 GROUP BY CUBE 로 사용하면 된다.
GROUPING SETS
GROUPING SETS는 표시된 인수들에 대한 개별 집계를 구할 수 있다.
kdata 한국데이터진흥원에서 출간한 SQL 전문가 가이드 2013 Edition을 요약했습니다.
'문송한 회사생활 > SQL 공부' 카테고리의 다른 글
[SQL] DCL (DATE CONTROL LANGUAGE) (0) | 2020.08.17 |
---|---|
[SQL] 윈도우 함수 (WINDOW FUNCTION) (1) | 2020.08.17 |
[SQL] 뷰(View) (0) | 2020.08.16 |
[SQL] 셀프 조인(SELF JOIN) (0) | 2020.08.16 |
[SQL] 오라클 계층형 질의 (Hierarchical Query) (0) | 2020.08.16 |