CS

[SQLD] GROUP BY

2026년 02월 15일 11:57

SQLD 2과목 - GROUP BY 절

GROUP BY 절

GROUP BY 절은 행을 특정 기준에 따라 그룹화하고, 각 그룹에 대해 집계 연산을 수행하기 위해 사용하는 구문이다.
주로 집계함수와 함께 사용되어 그룹별 요약 결과를 제공한다.
GROUP BY 절에는 그룹 기준이 될 컬럼을 지정하며, 여러 개의 컬럼을 동시에 지정할 수 있다.

📌 주의

  • GROUP BY 연산에서 제외할 행이 있는경우 WHERE 절에서 미리 제외
  • GROUP BY 절에서 나열하지 않은 컬럼은 SELECT 에서 사용 불가 (단, 집계 함수에서 포함된 컬럼 예외)
SELECT * | 컬럼명 | 표현식
    FROM 테이블명 또는 뷰명
    WHERE 조회할 데이터 조건
    GROUP BY 그룹핑 컬럼명
    HAVING 그룹핑 대상 필터링 조건

집계 함수

  • 여러 행의 값을 입력 받아 하나의 요약 값을 반환하는 다중 행 햄수
  • COUNT, SUM, AVG, MIN, MAX 등
  • 하나의 인수만 허용
  • NULL 값은 연산에서 제외

① COUNT

  • 테이블의 행 수를 세는 함수
  • 조건을 만족하는 행이 없는 경우에는 0ㅇ이 반환
  • NULL 값은 세지 않음
  • 문자, 숫자, 날짜 타입 컬럼 중 하나의 인수만 전달 가능
  • COUNT(*)은 NULL 여부와 관계없이 항상 전체 행의 개수 반환
COUNT(대상)

② SUM

  • 숫자 값의 총 합을 반환하는 함수
  • 숫자 타입 컬럼만 인수로 전달 가능
  • 조건을 만족하는 행이 없거나, 모든 값이 NULL 인 경우 NULL 반환
SUM(대상)
-- NULL로만 구성된 행들의 결과
SELECT COUNT(COMM),  -- 0
       SUM(COMM)     -- NULL
    FROM EMP
    WHERE COMM IS NULL;
-- 조건을 만족하는 대상이 없는 경우
SELECT COUNT(COMM),  -- 0
       SUM(COMM)     -- NULL
    FROM EMP
    WHERE COMM < 0;

③ AVG

  • 평균값을 반환하는 집계 함수
  • 숫자 타입 컬럼만 인수로 전달 가능
  • NULL 값을 제외한 값들에 대해서만 평균 계산
AVG(대상)
SELECT AVG(COMM),       -- NULL을 제외한 값들에 대한 평균 반환
       ROUND(SUM(COMM) / COUNT(COMM))   -- NULL을 고려하지 않은 인원에 대해 평균 반환
    FROM EMP;

SELECT ROUND(AVG(NVL(NULL, 0))) -- NULL을 0으로 치환한 후 평균 계산
    FROM EMP;

④ MIN/MAX

  • 각각 최솟값과 최댓값을 반환하는 집계 함수
  • 날짜, 숫자, 문자 타입 모두에서 사용 가능
MIN(대상) / MAX(대상)

예시

예시1

부서별 직원수와 급여 총합 출력

sqld-function1

👉 DEPTNO 값이 동일한 행들이 하나의 그룹으로 묶여, 각 그룹별로 COUNT, SUM 결과가 반환됨

예시2

가전제품의 카테고리와 브랜드별 평균 제품 가격 출력

sqld-function2

👉 CATEGORY 와 BRAND 가 모두 동일한 경우 하나의 그룹으로 묶어, PRICE 에 대한 평균값을 출력함

예시3

성별과 학년별로 학생 수와 최대 키를 출력

sqld-function3

👉 각 학년별로 남학생과 여학생을 각각 하나의 그룹으로 구분하여 키의 최대값을 출력함

예시4

GROUP BY 절의 잘못된 사용 예

sqld-function4

👉 GROUP BY 절에 명시되지 않은 컬럼은 SELECT 절에 전달할 수 없음!

HAVING 절

  • GROUP BY 로 그룹화 된 결과에 대해 조건을 설정할 때 사용
  • WHERE 절은 행 단위 조건을 적용하는 데 사용되지만 그룹화 된 결과에 대해 조건 설정이 불가하기 때문에 HAVING 절 사용

GROUP BY 결과에 대한 조건 설정

부서 번호별 급여 총합

sqld-function5

급여 총합이 10000 이상인 그룹만 출력

sqld-function6

👉 GROUP BY 결과에 대해 집계 함수 조건을 적용할 경우, WHERE 절이 아닌 HAVING 절에 조건 전달!

잘못된 조건 전달

sqld-function7

👉 WHERE 절에서는 집계 함수(SUM)를 사용할 수 없음

집계 함수와 NULL 정리

① NULL로만 구성된 행들에 대한 집계 결과

  • COUNT의 결과는 0 반환
  • 그 외 집계 함수 결과는 NULL 반환

② 조건에 맞는 데이터가 없는 경우에 대한 집계 결과

  • COUNT의 결과는 0 반환
  • 그 외 집계 함수의 겨로가 NULL 반환

③ 존재하지 않는 그룹에 대한 집계 결과

  • 해당 그룹 자체가 생성되지 않으므로 결과는 공집합으로 반환