Kong Eunho

4.3 그룹함수

2025년 08월 12일 16시
카테고리 - TIL, sqld, 4_SQL_활용


4.3.1 그룹함수의 개념

그룹함수 : GROUP BY절에 따른 결과에 대해서 그룹별로 연산을 수행하는 함수. 집계함수가 그룹함수의 일종이다.

이후의 그룹함수 예제에서는 아래 테이블을 사용한다.

STUDENT
DEPARTMENT GRADE SCORE
소프트웨어학과 1학년 3.7
소프트웨어학과 2학년 4.1
소프트웨어학과 2학년 2.6
소프트웨어학과 3학년 3.5
해고방지학과 2학년 3.6
해고방지학과 3학년 4.2
해고방지학과 4학년 2.9
해고방지학과 4학년 3.7


4.3.2 ROLLUP

ROLLUP : GROUP BY절에 들어가는 칼럼을 대상으로 하위 그룹핑을 수행하는 함수. 그룹을 대상으로 한 소계와 전체 총계를 자동으로 추가해 준다. GROUP BY ROLLUP(A, B)의 경우, (A, B) -> (A) -> (전체)의 순서로 하위 그룹핑을 수행한다.

SELECT DEPARTMENT, GRADE, COUNT(*)
FROM STUDENT
GROUP BY ROLLUP(DEPARTMENT, GRADE)
ORDER BY DEPARTMENT, GRADE;
=> 학과, 학년 별로 그룹핑하여 그룹별 개수를 구하고, 학과별 소계, 총계를 구한다.

실행결과
DEPARTMENT GRADE COUNT(*)
소프트웨어학과 1학년 1
소프트웨어학과 2학년 2
소프트웨어학과 3학년 1
소프트웨어학과 [NULL] 4
해고방지학과 2학년 1
해고방지학과 3학년 1
해고방지학과 4학년 2
해고방지학과 [NULL] 4
[NULL] [NULL] 8


4.3.3 CUBE

CUBE : ROLLUP과 비슷하지만, CUBE는 조합 가능한 모든 경우로 그룹핑을 수행한다. GROUP BY CUBE(A, B)의 경우, (A, B) -> (A) -> (B) -> (전체)의 순서로 하위 그룹핑을 수행한다.

SELECT DEPARTMENT, GRADE, COUNT(*)
FROM STUDENT
GROUP BY CUBE(DEPARTMENT, GRADE)
ORDER BY DEPARTMENT, GRADE;
=> 학과, 학년별로 그룹핑하여 그룹별 개수를 구하고, 학과별 소계, 학년별 소계, 총계를 구한다.

실행결과
DEPARTMENT GRADE COUNT(*)
소프트웨어학과 1학년 1
소프트웨어학과 2학년 2
소프트웨어학과 3학년 1
소프트웨어학과 [NULL] 4
해고방지학과 2학년 1
해고방지학과 3학년 1
해고방지학과 4학년 2
해고방지학과 [NULL] 4
[NULL] 1학년 1
[NULL] 2학년 3
[NULL] 3학년 2
[NULL] 4학년 2
[NULL] [NULL] 8


4.3.4 GROUPING SETS

GROUPING SETS : 그룹핑할 대상을 지정하는 함수. 입력된 인자에 대해서만 소계를 구한다. 인자에 ROLLUP, CUBE 함수를 넣을 수 있으며 이 경우 함수의 결과인 소계, 총계들이 각각 별개의 인자로 지정된 결과를 반환한다.

SELECT DEPARTMENT, GRADE, COUNT(*)
FROM STUDENT
GROUP BY GROUPING SETS(DEPARTMENT, GRADE)
ORDER BY DEPARTMENT, GRADE;
=> 학과, 학년별로 그룹핑하여 그룹별 개수를 반환한다.

실행결과
DEPARTMENT GRADE COUNT(*)
소프트웨어학과 [NULL] 4
해고방지학과 [NULL] 4
[NULL] 1학년 1
[NULL] 2학년 3
[NULL] 3학년 2
[NULL] 4학년 2


4.3.5 GROUPING

GROUPING : ROLLUP, CUBE, GROUPING SETS와 함께 사용하여 소계에 해당하는 행과 그렇지 않은 행을 구분할 수 있도록 해준다. 결과 행에는 1을 반환하며, 일반 행에는 0을 반환한다.

SELECT CASE GROUPING(DEPARTMENT)
    WHEN 1 THEN ‘총계’ ELSE DEPARTMENT
    END AS DEPARTMENT,
    COUNT(*)
FROM STUDENT
GROUP BY ROLLUP(DEPARTMENT)
ORDER BY DEPARTMENT;
=> 학과별로 그룹핑하며 마지막 총계 행에는 DEPARTMENT값을 ‘총계’ 텍스트로 대체한다.

실행결과
DEPARTMENT COUNT(*)
소프트웨어학과 4
해고방지학과 4
총계 8
◀ 이전 글 TIL, sqld, 4_SQL_활용
4.2 집합연산자
2025-08-11
목록으로 다음 글 ▶ TIL, sqld, 4_SQL_활용
4.4 윈도우함수
2025-08-13