[SQL] HAVING절 :: 집계 함수 결과를 원하는 조건으로 필터링하기 (w/ GROUP BY)

닷츠·2023년 4월 20일
0

SQL

목록 보기
2/2
post-thumbnail

유저별로 구매한 상품과 가격에 대해 알고 있는
테이블 orders가 있습니다.

먼저, 어떠한 조건 없이
유저별로 구매액의 합산을 리스트로 뽑으려면
selectfrom절만으로 충분합니다.

select
	id,
	sum(price)
from
	orders	
group by
	id

from 주문 내역 중에서
select group by 고객 별로 구매액의 합산을 보여줘

✅ 결과

하지만 데이터를 뽑다 보면 단순하게 전체 리스트보다
최소 1개 이상의 조건이 들어가는 경우가 더 많은데요.
그럴 때 사용할 수 있는 것이 having 절과
기본 구문인 where 절입니다.

HAVING 절과 WHERE 절의 차이

이 두 개는 각각의 목적이 다릅니다.
제가 이해한 내용 바탕으로 간단하게 비교해봤습니다.

HAVING 절은

  1. 집계함수로 먼저 계산된 결과에 대해
  2. 조건에 충족하는 값만 조회

WHERE 절은

  1. 조건에 충족하는 값에 대해서만
  2. 집계함수로 계산

위와 같이 값을 조회할 때 접근 순서가 다른데요,
이렇게 다른 순서는 꽤 다른 결과를 가져옵니다.

예시를 볼까요?

HAVING 절 예시

select
	id,
	sum(price)
from
	orders	
group by
	id
having sum(price) >= 10000

from 주문 내역 중에서
select group by 고객 별로 구매액의 합산을 보여줘

having 그 합산이 10,000원 이상인 경우만!

✅ 결과

WHERE 절 예시

select
	id,
	sum(price)
from
	orders
where
	price >= 10000
group by
	id

from 주문 내역 중에서
where 구매액이 10,000원 이상인 건에 대해서만

select group by 고객 별로 구매액의 합산을 보여줘

✅ 결과

HAVING 절 작성 방법

  1. 반드시 GROUP BY 절과 같이 작성해야 하고
  2. WHERE 절보다 뒤에 나와야 하며
  3. <검색조건>에는 SUM, AVG, MAX, MIN, COUNT와 같은 집계함수가 와야
    합니다.
profile
* 2024.1.6 부로 https://nuringdots.tistory.com/ 에서 통합 운영합니다.

0개의 댓글