1.문제
https://school.programmers.co.kr/learn/courses/30/lessons/164668
2.정답
SELECT GU.USER_ID
, GU.NICKNAME
, GB.TOTAL_SALES
FROM USED_GOODS_USER GU
INNER JOIN ( SELECT WRITER_ID
, SUM(PRICE) AS TOTAL_SALES
FROM USED_GOODS_BOARD
WHERE STATUS = 'DONE'
GROUP BY WRITER_ID
HAVING SUM(PRICE) >= 700000
) GB ON GU.USER_ID = GB.WRITER_ID
ORDER BY TOTAL_SALES
3.해설
- USED_GOODS_USER 테이블과 USED_GOODS_BOARD 테이블에서 상태가 DONE고, WRITER_ID 컬럼을 기준으로 GROUP BY를 하는데, PRICE의 총합이 700000 이상인 데이터를 가져와서 USER_ID와 WRITER_ID 컬럼을 기준으로 INNER JOIN을 한다.
- 각 USER_ID, NICKNAME, TOTAL_SALES를 출력하면 되는데, TOTAL_SALES기준으로 오름차순 정렬을 하면 된다.
4.내가 문제를 못 푼 이유
-컬럼명을 제대로 뽑아내지 못했다. 별칭 AS는 한번 적용되면 그대로 쓰면 된다. 굳이 반복적으로 별칭이 사용되기 전 문법을 써주지 않아도 된다.
-GROUP BY ~ HAVING절을 제대로 이해 못했다. 여기서 쓰인 집계함수(SUM)의 목적을 이해해야한다. 문제에서는 중고거래 금액이 70만원 이상인 '회원 ID'를 구하고자한다. 그렇다면 금액이 적혀있는 USED_GOODS_BOARD 테이블에서 금액의 총합이 70만원인 데이터를 뽑아오면 되는데, '무엇'의 금액 총합인지 정해줘야한다. '회원ID' 총 거래금액이기 때문에 테이블에서는 회원아이디와 같은 WRITER_ID가 무엇에 해당한다. 그래서 SELECT문에서 집계함수 SUM과 WRITER_ID가 함꼐 쓰였다.
'DB > SQL오답노트' 카테고리의 다른 글
[SQL/SQL오답노트]LV3.대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 (0) | 2023.04.12 |
---|---|
[SQL/SQL오답노트]LV4.서울에 위치한 식당 목록 출력하기 (0) | 2023.04.06 |
[SQL/SQL오답노트]LV4.그룹별 조건에 맞는 식당 목록 출력하기 (0) | 2023.04.05 |
[SQL오답노트/프로그래머스]LV2.조건에 부합하는 중고거래 상태 조회하기 (0) | 2023.03.10 |
[SQL오답노트/프로그래머스]LV2.입양 시각 구하기(1) (0) | 2023.03.07 |