프로그래머스/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;