SQLD - 그룹별 함수

헨도·2024년 2월 29일
0

SQLD

목록 보기
28/28
post-thumbnail

ROLLUP

  • ROLLUP은 GROUP BY의 컬럼에 대해서 Subtotal 을 만들어 준다.
  • ROLLUP을 할 때 GROUP BY 구에 컬럼이 두 개 이상 오면 순서에 따라서 결과가 달라진다.

ROLLUP 사용

SELECT
	DECODE(DEPTNO, NULL, "전체합계", DEPTNO),
    SUM(SAL)
FROM EMP
GROUP BY
	ROLLUP(DEPTNO);

- DEPTNO가 NULL이면 '전체합계' 문자를 출력한다.
- ROLLUP 을 사용하면 부서별 합계 및 전체합계가 계산된다.
  • 위의 예시는 DEPTNO에 대해 GROUP BY로 급여합계를 계산하고 부서별 전체합계를 추가해서 계산했다.
    즉, ROLLUP은 DEPTNO에 대해서 기존 GROUP BY와는 다르게 부서별 전체합계를 계산하게 된다.
  • DECODE 문은 전체합계를 조회할 때 '전체합계'라는 문자를 출력하기 위해서 사용된다.
    DECODE 문을 사용해서 DEPTNO 가 NULL 과 같으면 '전체합계'라는 문자를 출력하고 그렇지않으면 부서번호(DEPTNO)를 출력한다.

부서별(DEPTNO), 직업별(JOB) ROLLUP 실행

SELECT
	DEPTNO, JOB, SUM(SAL)
FROM EMP
GROUP BY
	ROLLUP(DEPTNO, JOB);
    
- 부서별, 직업별 합계를 구한다.
  ROLLUP은 Subtotal을 구한다.
  • 부서별, 직업별 ROLLUP을 실행하면 부서별 합계, 직업별 합계, 전체합계가 모두 조회된다.
  • ROLLUP으로 실행되는 컬럼별로 Subtotal을 만들어 준다.

GROUPING 함수

  • GROUPING 함수는 ROLLUP, CUBE, GROUPING SETS 에서 생성되는 합계값을 구분하기 위해서 만들어진 함수이다.
  • 예를 들어 소계, 합계 등이 개선되면 GROUPING 함수는 1을 반환하고 그렇지 않으면 0을 반환해서 합계값을 식별할 수 있다.
SELECT
	DEPTNO, GROUPING(DEPTNO), JOB, GROUPING(JOB), SUM(SAL)
FROM EMP
GROUP BY
	ROLLUP(DEPTNO, JOB);
 

- ROLLUP, CUBE, GROUPING SETS 으로 계산된 합계는 '1'로 표시한다.
- '1'의 값으로 소계와 전체합계를 개발자가 구분할 수 있게 된다.
  • 위의 SQL 문을 보면 소계와 합계가 계산된 데이터는 GROUPING 함수에서 '1'이 출력된 것을 알 수 있다.
  • GROUPING 의 반환값을 DECODE 혹은 CASE 문으로 식별해서 SELECT 문으로 '소계', '합계'를 구분하는 것이다.

전체합계와 부서합계 표시(DECODE와 GROUPING)

SELECT
	DEPTNO,
    DECODE(GROUPING(DEPTNO), 1, '전체합계') TOT,
    JOB,
    DECODE(GROUPING(JOB), 1, '부서합계') T_DEPT,
    SUM(SAL)
FROM EMP
GROUP BY ROLLUP(DEPTNO, JOB);
  • 위의 예시를 보면 DECODE 함수를 사용해서 GROUPING 함수 결과가 '1'이면 '전체합계' 혹은 '부서합계'를 출력하고 그렇지 않으면 NULL 을 반환한다.
  • GROUPING 함수의 기능을 사용하면 사용자가 필요로 하는 데이터를 SELECT 문으로 작성하여 제공할 수 있다.

GROUPING SETS 함수

  • GROUPING SETS 함수는 GROUP BY 에 나오는 컬럼의 순서와 관계없이 다양한 소계를 만들 수 있다.
  • GROUPING SETS 함수는 GROUP BY 에 나오는 컬럼의 순서와 관계없이 개별적으로 모두 처리한다.

직업별 합계와 부서별 합계 표시

SELECT
	DEPTNO, JOB, SUM(SAL)
FROM EMP
GROUP BY
	GROUPING SETS(DEPTNO, JOB);
  • 위의 예시를 보면 GROUPING SETS 함수로 DEPTNO와 JOB을 실행했다.
  • 그 결과 DEPTNO 합계와 JOB 합계가 개별적으로 조회되었다.
    즉, 서로 관계가 없다는 것이다.

CUBE 함수

  • CUBE는 CUBE 함수에 제시한 컬럼에 대해서 결합 가능한 모든 집계를 계산한다.
  • 다차원 집계를 제공하여 다양하게 데이터를 분석할 수 있게 한다.
  • 예를 들어 부서와 직업을 CUBE로 사용하면 부서별 합계, 직업별 합계, 부서별 직업별 합계, 전체합계가 조회된다.
  • 즉, 조합할 수 있는 경우의 수가 모두 조합되는 것이다.

CUBE 함수

SELECT
	DEPTNO, JOB, SUM(SAL)
FROM EMP
GROUP BY
	CUBE(DEPTNO, JOB)
  • CUBE는 모든 합계를 모두 계산하는 다차원 분석을 한다.
profile
Junior Backend Developer

0개의 댓글