Post

[SQL] GROUP BY와 HAVING 개념 및 예제

[SQL] GROUP BY와 HAVING 개념 및 예제

서론

SQL 면접 질문이나 실무 예제를 보다 보면 빠지지 않고 등장하는 구문이 GROUP BYHAVING이다. 문법만 외우기보다 실제 예제와 함께 이해하면 훨씬 오래 기억에 남는다.

Group By란?

GROUP BY는 같은 값을 가진 행을 기준으로 데이터를 묶는 구문이다. 보통 COUNT, SUM, AVG 같은 집계 함수와 함께 사용한다.

DISTINCT는 중복 제거에 초점을 둔 구문이고, GROUP BY는 데이터를 그룹화한 뒤 집계하거나 그룹 단위 조건을 적용할 때 사용한다.

집계 함수

  • COUNT(): 행 수 반환
  • MAX(): 최댓값 반환
  • MIN(): 최솟값 반환
  • SUM(): 합계 반환
  • AVG(): 평균 반환

예제

테이블 데이터가 다음과 같이 있다고 가정하자.

Group_By_01

이때 장르별 책 수량 합계를 구하고 싶다면 다음처럼 작성할 수 있다. 먼저 genreSUM(qty)를 선택하고, genre를 기준으로 그룹화한다.

1
2
3
SELECT genre, SUM(qty) AS total
FROM book
GROUP BY genre;
Group_By_02

Having

HAVING은 그룹화된 결과에 조건을 거는 구문이다. 즉, WHERE가 개별 행을 대상으로 한다면 HAVING은 집계 이후의 그룹을 대상으로 한다.

1
2
3
4
SELECT genre, SUM(qty) AS total
FROM book
GROUP BY genre
HAVING SUM(qty) > 5;

장르별 합계가 5보다 큰 그룹만 조회하면 다음과 같은 결과를 얻을 수 있다.

Group_By_03
This post is licensed under CC BY 4.0 by the author.