GROUP FUNCTION (그룹 함수)
포스트
취소

GROUP FUNCTION (그룹 함수)

해당 포스트는 SQLD를 학습하며 정리한 내용에 대한 포스트입니다.


이론을 학습한 내용을 정리하고 퀴즈, 기출문제 등을 기록하려고 합니다.


🌈 GROUP FUNCTION (그룹 함수)

💻 GROUPING 함수

  
집계 함수COUNT, SUM, AVG, MAX, MIN 등
소계(총계) 함수ROLLUP, CUBE, GROUPING SETS 등

GROUPING 함수는 ROLLUP, CUBE, GROUPING SETS에서 생성되는 합계값을 구분하기 위해서 만들어진 함수이다.

ROLLUP 함수는 인수의 순서에 따라 결과가 달라지며 CUBE 함수와 GROUPING SETS 함수는 인수의 순서가 바뀌어도 같은 결과를 출력한다.

  • 예를 들어 소계, 합계 등이 계산되면 GROUPING 함수는 1을 반환하고 그렇지 않으면 0을 반환해서 합계값을 식별할 수 있다.

GROUPING 함수

  • 위의 SQL문을 보면 소계와 합계가 계산된 데이터는 GROUPING 함수에서 1이 출력된 것을 알 수 있다.

  • GROUPING의 반환값을 DECODE 혹은 CASE문으로 식별해서 SELECT문으로 ‘소계’, ‘합계’를 구분하는 것이다.

GROUPING 함수

  • 위의 예를 보면 DECODE 함수를 사용해서 GROUPING 함수 결과가 ‘1’이면 ‘전체합계’ 혹은 부서합계를 출력하고 그렇지 않으면 NULL을 반환한다.

  • GROUPING 함수의 기능을 사용하면 사용자가 필요로 하는 데이터를 SELECT문으로 작성하여 제공할 수 있다.


💻 ROLLUP

  
ROLLUP(A)- A로 그룹핑
- 총합계
ROLLUP(A, B)- A, B로 그룹핑
- A로 그루핑
- 총합계
ROLLUP(A, B, C)- A, B, C로 그룹핑
- A, B로 그루핑
- A로 그루핑
- 총합계

ROLLUP은 GROUP BY의 컬럼에 대해서 Subtotal을 만들어 준다.

ROLLUP을 할 때 GROUP BY구에 컬럼이 두 개 이상 오면 순서에 따라서 결과가 달라진다.

ROLLUP

  • 위의 예는 DEPTNO에 대해서 GROUP BY로 급여합계를 계산하고 부서별 전체합계를 추가해서 계산했다.

  • 즉, ROLLUP은 DEPTNO에 대해서 기존 GROUP BY와는 다르게 부서별 전체합계를 계산하게 된다.

  • DECODE문은 전체합계를 조회할 때 ‘전체합계’라는 문자를 출력하기 위해서 사용된다.

  • DECODE문을 사용해서 DEPTNO가 NULL과 같으면 ‘전체합계’라는 문자를 출력하고 그렇지 않으면 부서번호(DEPTNO)를 출력한다.

ROLLUP

  • 부서별, 직업별 ROLLUP을 실행하면 부서별 합계, 직업별 합계, 전체합계가 모두 조회된다.

  • ROLLUP으로 실행되는 컬럼별로 Subtotal을 만들어 준다.


💻 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는 CUBE 함수에 제시한 컬럼에 대해서 결합 가능한 모든 집계를 계산한다.

소그룹 간의 소계 및 총계를 다차원 집계를 제공하여 다양하게 데이터를 분석할 수 있게 한다.

  • 예를 들어 부서와 직업을 CUBE로 사용하면 부서별 합계, 직업별 합계, 부서별 직업별 합계, 전체합계가 조회된다.

  • 즉, 조합할 수 있는 경우의 수가 모두 조합되는 것이다.

CUBE 함수

  • 위의 예에서는 CUBE로 부서코드와 직업을 실행했다.

  • 그 결과 전체합계, 직업별 합계, 부서별 합계, 부서별 직업별 합계가 조회됐다.


💻 GROUPING SETS 함수

  
GROUPING SETS(A, B)- A로 그룹핑
- B로 그룹핑
GROUPING SETS(A, B, ())- A로 그룹핑
- B로 그룹핑
- 총합계
GROUPING SETS(A, ROLLUP(B))- A로 그룹핑
- B로 그룹핑
- 총합계
GROUPING SETS(A, ROLLUP(B, C))- A로 그룹핑
- B, C로 그룹핑
- B로 그룹핑
- 총합계
GROUPING SETS(A, B, ROLLUP(C))- A로 그룹핑
- B로 그룹핑
- C로 그룹핑
- 총합계

특정 항목에 대한 소계를 계산

인자값으로 ROLLUP이나 CUBE 사용가능

GROUPING SETS 함수는 GROUP BY에 나오는 컬럼의 순서와 관계없이 다양한 소계를 만들 수 있다.

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

GROUPING SETS 함수

  • 위의 예를 보면 GROUPING SETS 함수로 DEPTNO와 JOB을 실행했다.

  • 그 결과 DEPTNO 합계과 JOB 합계가 개별적으로 조회되었다.

  • 즉, 서로 관계가 없다는 것이다.


💻 GROUPING 함수

GROUPING 함수는 ROLLUP, CUBE, GROUPING SETS 등과 함께 쓰이며 소계를 나타내는 ROW를 구별할 수 있게 해준다.

GROUPING을 함께 사용하지 않았을 때 소계 영역에서 NULL 또는 공란으로 표현되었지만, GROUPING 함수를 이용하면 원하는 위치에 원하는 텍스트를 출력할 수 있다.


🎯 추가 내용

👉


📚 레퍼런스

정미나. (유튜브 선생님에게 배우는) 유선배 SQL개발자(SQLD) 과외노트 / [정미나 저] (2023). Print.

한국데이터산업진흥원. SQL 자격검정 실전문제 : 국가공인 SQL전문가·국가공인 SQL개발자 / 한국데이터산업진흥원 [편] (2020). Print.

SQL 개발자 (SQLD) 자격증 따기 Part.3 / [유용한IT학습]

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.