프로그래머스/My SQL
조건에 맞는 사용자와 총 거래금액 조회하기
싱싱한복초이
2024. 12. 2. 10:20
https://school.programmers.co.kr/learn/courses/30/lessons/164668
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
[문제]
USED_GOODS_BOARD와 USED_GOODS_USER 테이블에서 완료된 중고 거래의 총금액이 70만 원 이상인 사람의 회원 ID, 닉네임, 총거래금액을 조회하는 SQL문을 작성해주세요. 결과는 총거래금액을 기준으로 오름차순 정렬해주세요.
[나의 풀이]
SELECT USER_ID, NICKNAME, SUM(PRICE) TOTAL_SALES
FROM USED_GOODS_BOARD B
LEFT JOIN USED_GOODS_USER U
ON B.WRITER_ID = U.USER_ID
WHERE STATUS = 'DONE'
GROUP BY USER_ID
HAVING SUM(PRICE) >= 700000
ORDER BY TOTAL_SALES;
[다른 풀이]
이렇게 서브쿼리를 이용해서도 풀어봤는데
SELECT USER_ID, NICKNAME,
(SELECT SUM(PRICE)
FROM USED_GOODS_BOARD
WHERE WRITER_ID = U.USER_ID AND STATUS = 'DONE') AS TOTAL_SALES
FROM USED_GOODS_USER U
WHERE (SELECT SUM(PRICE)
FROM USED_GOODS_BOARD
WHERE WRITER_ID = U.USER_ID AND STATUS = 'DONE') >= 700000
ORDER BY TOTAL_SALES ASC;
챗지피티가 더 좋은 방향으로 수정해주었다.
(수정 결과)
WITH TOTALS AS (
SELECT WRITER_ID, SUM(PRICE) AS TOTAL_SALES
FROM USED_GOODS_BOARD
WHERE STATUS = 'DONE'
GROUP BY WRITER_ID
)
SELECT U.USER_ID, U.NICKNAME, T.TOTAL_SALES
FROM USED_GOODS_USER U
JOIN TOTALS T ON U.USER_ID = T.WRITER_ID
WHERE T.TOTAL_SALES >= 700000
ORDER BY T.TOTAL_SALES ASC;