데이터 분석/SQL

[SQL 문법] HAVING

참치바나나 2020. 11. 4. 15:04

group by 를 사용하고 집계함수를 써 결과 값을 만들어 내는데, 그 결과 값을 필터링 하기 위함

where는 결과 이전을 필터링 하고 having은 그 이후를 필터링

구매량이 200 이상인 고객을 찾고 싶다

SELECT p.customer_id 
	,sum(p.amount) AS amount
FROM payment p 
GROUP BY customer_id 
HAVING sum(p.amount) > 200
ORDER BY amount DESC;

ORDER BY amount 는 됐는데, HAVING amount > 200 은 안됨.

 

구매량의 합이 190 이상인 고객이 이용한 매장을 알고 싶다

SELECT 
	p.customer_id 
	,c.store_id 
	,sum(p.amount) AS amount
FROM payment p ,customer c
WHERE p.customer_id = c.customer_id 
GROUP BY p.customer_id ,c.store_id 
HAVING sum(p.amount) > 190
ORDER BY amount DESC;

WHERE로 ROW를 통일하고, HAVING으로 필터링

 

각 매장별로 구매량의 합이 120 이상인 고객의 수를 알고 싶다

먼저 구매량의 합이 120 이상인 고객의 customer_id 를 구한다

SELECT p.customer_id 
FROM payment p
GROUP BY p.customer_id 
HAVING sum(p.amount ) >120;

그리고 고객이 속한 store_id를 찾아서 count 한다

SELECT 
	c3.store_id 
	,count(c3.customer_id) 
FROM customer c3 
WHERE c3.customer_id in(
	SELECT p.customer_id 
	FROM payment p
	GROUP BY p.customer_id 
	HAVING sum(p.amount ) >120)
GROUP BY c3.store_id 
;

 

'데이터 분석 > SQL' 카테고리의 다른 글

[SQL 문법] ROLLUP ( ) 절  (0) 2020.11.05
[SQL 문법] GROUPING SET 절, GROUPING 함수  (0) 2020.11.04
[SQL 문법] GROUP BY  (0) 2020.11.04
[SQL 문법] NATURAL JOIN  (0) 2020.11.04
[SQL 문법] CROSS JOIN  (0) 2020.11.04