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
부서별 직원수와 급여 총합 출력

👉 DEPTNO 값이 동일한 행들이 하나의 그룹으로 묶여, 각 그룹별로 COUNT, SUM 결과가 반환됨
예시2
가전제품의 카테고리와 브랜드별 평균 제품 가격 출력

👉 CATEGORY 와 BRAND 가 모두 동일한 경우 하나의 그룹으로 묶어, PRICE 에 대한 평균값을 출력함
예시3
성별과 학년별로 학생 수와 최대 키를 출력

👉 각 학년별로 남학생과 여학생을 각각 하나의 그룹으로 구분하여 키의 최대값을 출력함
예시4
GROUP BY 절의 잘못된 사용 예

👉 GROUP BY 절에 명시되지 않은 컬럼은 SELECT 절에 전달할 수 없음!
HAVING 절
- GROUP BY 로 그룹화 된 결과에 대해 조건을 설정할 때 사용
- WHERE 절은 행 단위 조건을 적용하는 데 사용되지만 그룹화 된 결과에 대해 조건 설정이 불가하기 때문에 HAVING 절 사용
GROUP BY 결과에 대한 조건 설정
부서 번호별 급여 총합

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

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

👉 WHERE 절에서는 집계 함수(SUM)를 사용할 수 없음
집계 함수와 NULL 정리
① NULL로만 구성된 행들에 대한 집계 결과
- COUNT의 결과는 0 반환
- 그 외 집계 함수 결과는 NULL 반환
② 조건에 맞는 데이터가 없는 경우에 대한 집계 결과
- COUNT의 결과는 0 반환
- 그 외 집계 함수의 겨로가 NULL 반환
③ 존재하지 않는 그룹에 대한 집계 결과
- 해당 그룹 자체가 생성되지 않으므로 결과는 공집합으로 반환
