본문 바로가기

자격증/SQLD

[SQLD][아이리포]21. 서브쿼리 | 그룹함수 | ROLLUP | CUBE | GROUPING SETS, GROUPING

반응형
목차

4. 서브쿼리
4-3. 그룹함수
4-3-1. ROLLUP
4-3-2. CUBE
4-3-3. GROUPING SETS
4-3-4. GROUPING

4. 서브쿼리

4-3. 그룹함수

그룹함수는 GROUP BY의 결과를 대상으로 그룹별 집계나 소계, 통계를 계산하는 함수이다.

 

대표적인 그룹 함수는 다음과 같다.

- 집계함수(COUNT, SUM, AVG 등)

- ROLLUP

- CUBE

- GROUPING SETS

- GROUPING

1️⃣ ROLLUP

ROLLUP은 GROUP BY 컬럼을 기준으로 계층적인 소계와 총계를 생성하는 함수이다.

 

쉽게 말해서, 아래에서 위로 올라가며 합계를 만든다고 볼 수 있다.

 

✔️ 특징

- 계층적인 그룹핑

- 소계 + 총계 생성

- 1차원(계층형) 그룹핑

- ex) GROUP BY ROLLUP(날짜, 이름)

➜ 생성되는 그룹 : (날짜, 이름) -> 날짜별 소계 -> 전체 총계

 

🔹 기본 사용법

SELECT A
      ,COUNT(*)
FROM DUAL
GROUP BY ROLLUP(A)
ORDER BY A;

 

 

🔹 예제(테이블 일부)

 

SELECT CYL
       ,COUNT(*)
FROM MTCARS
GROUP BY ROLLUP(CYL)
ORDER BY CYL;

 

➜ 실린더 수 별 개수를 구한 후, 총계까지 함께 조회한다.

 

🔹 실행결과

2️⃣ CUBE

CUBE는 가능한 모든 조합의 그룹을 생성하는 함수이다.

ROLLUP보다 더 많은 결과가 만들어진다.


✔️ 특징

- 가능한 모든 조합 생성

- 소계 + 총계 생성

- 2차원(입체적) 그룹핑

- ex) GROUP BY CUBE(날짜, 이름)

➜ 생성되는 그룹 : (날짜, 이름) -> 날짜별 소계 -> 이름별 소계 -> 전체 총계

 

🔹 기본 사용법

SELECT A
      ,B
      ,COUNT(*)
FROM DUAL GROUP BY CUBE(A, B)
ORDER BY A, B;

 

🔹 예제

SELECT CYL
      ,GEAR
      ,COUNT(*)
FROM MTCARS GROUP BY CUBE(CYL, GEAR)
ORDER BY CYL, GEAR;

 

실린더 수 별 그룹, 기어 수 별 그룹, 실린더+기어 조합, 전체 총계를 모두 조회한다.

 

🔹 실행결과

3️⃣ GROUPING SETS

그룹핑 대상을 지정하는 함수

GROUPING SETS는 원하는 그룹만 선택해서 그룹핑하는 함수이다.

 

ROLLUP이나 CUBE처럼 자동으로 소계를 만드는 것이 아니라, 지정한 그룹만 계산한다.

 

✔️ 특징

- 필요한 그룹만 선택 가능

- 불필요한 소계 생성을 하지 않음

 

🔹 기본 사용법

SELECT A
      ,B
      ,COUNT(*)
FROM DUAL
GROUP BY GROUPING SETS(A, B)
ORDER BY A, B;

 

🔹 예제

SELECT CYL
      ,GEAR
      ,COUNT(*)
FROM MTCARS
GROUP BY GROUPING SETS(CYL, GEAR)
ORDER BY CYL, GEAR;

 

➜ 실린더 수, 기어 수 별로 그룹한 결과만 조회한다.

ROLLUP 처럼 총계가 자동으로 생성되지 않는다.

 

🔹 실행결과

4️⃣ GROUPING

GROUPING 함수는 ROLLUP, CUBE, GROUPING SETS와 함께 사용되며

현재 행이 소게 또는 총계인지를 판별하는 함수이다.

 

✔️ 반환값

의미
0 일반 데이터
1 소계 또는 총계

 

🔹 기본 사용법

SELECT CASE GROUPING(A)
       WHEN 1 THEN '총계' ELSE TO_CHAR(A)
       END AS A,
       COUNT(*)
FROM DUAL
GROUP BY ROLLUP(A)
ORDER BY A;


🔹 예제

SELECT CASE GROUPING(CYL)
       WHEN 1 THEN '총계' ELSE TO_CHAR(CYL)
       END AS CYL,
       COUNT(*)
FROM MTCARS
GROUP BY ROLLUP(CYL)
ORDER BY CYL;

 

➜ 실린더 수 별 그룹과 총계 행을 구분하여 '총계'라는 문자로 표시한다.

 

🔹 실행결과

 

📝 그룹함수 비교

함수 특징
ROLLUP 계층적인 소계와 총계를 생성
CUBE 가능한 모든 조합의 소계와 총계를 생성
GROUPING SETS 원하는 그룹만 선택하여 그룹핑
GROUPING 소계 / 통계 여부를 판별

 

📌 시험에는 CASE 문과 반드시 함께 나온다.

 

📌 그룹함수는 매 시험마다 나오니 반드시 숙지하자.


🔗 출처

[SQLD 모든 것]

 

반응형