database

[SQL] WHERE과 HAVING의 차이

keepgoing 2023. 4. 14. 17:22

WHERE과 HAVING 모두 조건을 설정한다는 특징에서 같다.

 

하지만, 

WHERE은 데이터들 중 조건에 맞는 행을 가져오면 반면

 

HAVING은 그룹화된 데이터들 중 조건에 맞는 특정 그룹을 가져온다.

 

예를 들어, 아래와 같은 orders 테이블이 존재할 때.

order_id customer_id order_date total_amount
1 1 2022-01-01 100
2 2 2022-01-02 200
3 1 2022-01-03 150
4 3 2022-01-04 50
5 1 2022-01-05 80

WHERE 문

SELECT * FROM orders WHERE total_amount > 100;

결과

order_id customer_id order_date total_amount
2 2 2022-01-02 200
3 1 2022-01-03 150

HAVING 문

SELECT customer_id, COUNT(*) FROM orders GROUP BY customer_id HAVING COUNT(*) > 1;

결과

customer_id COUNT(*)
1 3

 

내가 헷갈렸던 사항은 COUNT(*) 였다.

COUNT(*)는 모든 레코드 수를 반환하는 의미이다.

 

group by는 customer_id로 선언되었기 때문에 COUNT역시 customer_id 레코드 수를 반환한다.