[SQL] GROUPING, GROUP BY ROLLUP - 애증의 롤업(3)

Yuri Lee·2024년 10월 15일
1

SQL

목록 보기
10/10

실무에서 쓰는 GROUPING 방법!

SELECT GROUPING(부서)||GROUPING(직급) AS GRP, 부서, 직급, AVG(급여)
FROM 직원
GROUP BY ROLLUP(부서, 직급);

이 쿼리에서 GROUPING(부서) || GROUPING(직급) AS GRP는 두 개의 GROUPING 결과를 문자열로 결합하는 방식입니다. GROUPING(부서)GROUPING(직급)은 각각 0 또는 1의 값을 반환하며, 이 값들을 결합해 한 컬럼으로 보여주게 됩니다.

쿼리:

SELECT GROUPING(부서) || GROUPING(직급) AS GRP, 부서, 직급, AVG(급여)
FROM 직원
GROUP BY ROLLUP(부서, 직급);

동작 방식:

  • GROUPING(부서): 1이면 부서가 생략된 집계를 의미하고, 0이면 부서가 포함된 집계를 의미합니다.
  • GROUPING(직급): 1이면 직급이 생략된 집계를 의미하고, 0이면 직급이 포함된 집계를 의미합니다.
  • 두 값을 문자열로 결합하여, 각 집계 단계가 어느 수준에서 이루어졌는지 확인할 수 있습니다.

예시:

가정: 아래와 같은 데이터가 있다고 해봅시다.

부서직급급여
영업부사원4000
영업부대리5500
개발부사원5000
개발부대리7000

이 쿼리의 결과는 다음과 같습니다:

GRP | 부서   | 직급   | 평균 급여
--------------------------------
00  | 영업부 | 사원   | 4000
00  | 영업부 | 대리   | 5500
01  | 영업부 | NULL   | 4750 (영업부 전체 평균)
00  | 개발부 | 사원   | 5000
00  | 개발부 | 대리   | 7000
01  | 개발부 | NULL   | 6000 (개발부 전체 평균)
11  | NULL   | NULL   | 5375 (전체 회사 평균)

결과 해석:

  • GRP = '00': 부서와 직급이 모두 포함된 집계를 의미합니다.
  • GRP = '01': 부서별 집계이고, 직급이 생략된 집계를 의미합니다 (부서별 평균).
  • GRP = '11': 부서와 직급이 모두 생략된 전체 집계를 의미합니다 (전체 회사 평균).

요약:

  • GROUPING(부서)GROUPING(직급)을 결합하면, 해당 컬럼이 집계에서 어떻게 처리되었는지 쉽게 확인할 수 있습니다.
  • 결합된 결과는 문자열로 나타나며, 00, 01, 10, 11의 값으로 나타납니다.
    • 00: 부서와 직급이 모두 포함된 집계.
    • 01: 직급이 생략된 집계 (부서별 집계).
    • 11: 부서와 직급이 모두 생략된 전체 집계.
profile
유리

0개의 댓글