본문 바로가기
MySQL

[MySQL] 결과 테이블의 일부 조건만 출력하기 HAVING

by LightBlogger 2017. 8. 4.

연습으로 계속 사용하던 두 테이블, product_data 와 user_data에서


각 유저가 구매한 총 금액을 구하려면 어떻게 해야할까?


      


user_data 테이블의 product 항목을 product_data 테이블에서 참조하여 금액을 불러오고,


해당 금액의 합계를 sum()으로 구하면서 user_id 별로 그룹핑해 주면 되겠다. 즉,


SELECT u.user_id, sum(p.price) 

FROM user_data as u LEFT JOIN product_data as p ON u.product=p.product_id 

GROUP BY u.user_id 

ORDER BY sum(p.price) DESC;


정도로 적으면 되겠다.


결과는 다음과 같다.



이중에서 총 구매금액 합계가 5억 5천 이상인 유저만 출력하려면 어떻게 해야할까?


LIMIT 을 써도 되겠다. LIMIT 은 출력할 행의 개수를 지정해 주는 명령이다.



혹은, 방금 전의 쿼리를 서브 쿼리로 구성하고, 밖에서 WHERE 로 조건을 주는 방법도 있겠다. 즉,



SELECT * FROM 

SELECT u.user_id, sum(p.price) as pay 

FROM user_data as u LEFT JOIN product_data as p ON u.product=p.product_id 

GROUP BY u.user_id 

ORDER BY sum(p.price) DESC 

) as sub 


WHERE sub.pay>=550000000


이와 같이 쿼리를 적어도 된다.



하지만 가장 간단한 방법은 HAVING을 사용하는 것이다.


HAVING은 결과 테이블에서 일정 조건을 만족하는 것만 출력하도록 해 준다.


SELECT u.user_id, sum(p.price) as pay

FROM user_data as u LEFT JOIN product_data as p ON u.product=p.product_id 

GROUP BY u.user_id 

HAVING pay>=550000000

ORDER BY sum(p.price) DESC;


결과는 다음과 같다.



HAVING은 GROUP BY 다음에 위치해야 한다. 


다음과 같이 ORDER BY 다음에 적으면 에러가 출력되므로 주의한다.


반응형

댓글