[SQLD]「2」(2.5) ROLLUP/CUBE/GROUPING SETS/GROUPING

728x90

[SQLD]2」(2.5) ROLLUP/CUBE/GROUPING SETS/GROUPING

「1」 데이터 모델링의 이해

> 「2」 SQL 기본 / 활용

「3」 관리 구문

 

1. 서브쿼리

2. 뷰

3. 집합 연산자

> 4. 소계(총계) 함수

5. 윈도우 함수

6. Top-N 쿼리

7. 셀프 조인

8. 계층 쿼리

 

4. 소계(총계) 함수

소계(총계) 함수

⸰ 소계(총계) 함수 :ROLLUPCUBEGROUPING 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 과외노트

728x90