연습으로 계속 사용하던 두 테이블, 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 다음에 적으면 에러가 출력되므로 주의한다.
'MySQL' 카테고리의 다른 글
[MySQL] 데이터 변경하기 UPDATE (0) | 2017.12.28 |
---|---|
[MySQL] 데이터 삭제하기 DELETE, TRUNCATE (1) | 2017.12.27 |
[MySQL] 테이블에 데이터 입력하기 INSERT INTO (0) | 2017.12.10 |
[MySQL] 테이블 이름 확인하기 SHOW TABLES (0) | 2017.12.08 |
[MySQL] DB에서 특정 행들만 가져오기(1) - WHERE 절의 "or"를 이용 (0) | 2017.09.08 |
[MySQL] 일부 값만 음수로 계산하기 (조건문 CASE) (0) | 2017.07.28 |
[MySQL] apmsetup으로 연습환경 구축하기, 데이터 넣기 Import (0) | 2017.07.25 |
[MySQL] 다른 테이블에서 데이터 참조하기 JOIN (vlookup) (2) | 2017.06.15 |
[MySQL] 합 구하기 sum / 그룹별로 집계하기 group by / 정렬 order by (1) | 2017.05.05 |
[MySQL] 조건절 WHERE 사용하기(and, or, not, like) (0) | 2017.05.04 |
댓글