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 레코드 수를 반환한다.