[MySQL] 프로그래머스 Lv 3. 조건에 맞는 사용자와 총 거래금액 조회하기 정답풀이
문제 설명
다음은 중고 거래 게시판 정보를 담은 USED_GOODS_BOARD 테이블과 중고 거래 게시판 회원 정보를 담은 USED_GOODS_USER 테이블입니다. USED_GOODS_BOARD 테이블은 다음과 같으며 BOARD_ID, WRITER_ID, TITLE, CONTENTS, PRICE, CREATED_DATE, STATUS, VIEWS는 게시글 ID, 작성자 ID, 게시글 제목, 게시글 내용, 가격, 작성일, 거래상태, 조회수를 의미합니다.
Coulmn name | Type | Nullable |
BOARD_ID | VARCHAR(5) | FALSE |
WRITER_ID | VARCHAR(50) | FALSE |
TITLE | VARCHAR(100) | FALSE |
CONTENTS | VARCHAR(1000) | FALSE |
PRICE | NUMBER | FALSE |
CREATED_DATE | DATE | FALSE |
STATUS | VARCHAR(10) | FALSE |
VIEWS | NUMBER | FALSE |
USED_GOODS_USER 테이블은 다음과 같으며 USER_ID, NICKNAME, CITY, STREET_ADDRESS1, STREET_ADDRESS2, TLNO는 각각 회원 ID, 닉네임, 시, 도로명 주소, 상세 주소, 전화번호를 의미합니다.
Coulmn name | Type | Nullable |
USER_ID | VARCHAR(50) | FALSE |
NICKNAME | VARCHAR(100) | FALSE |
CITY | VARCHAR(100) | FALSE |
STREET_ADDRESS1 | VARCHAR(100) | FALSE |
STREET_ADDRESS2 | VARCHAR(100) | TRUE |
TLNO | VARCHAR(20) | FALSE |
문제
USED_GOODS_BOARD와 USED_GOODS_USER 테이블에서 완료된 중고 거래의 총금액이 70만 원 이상인 사람의 회원 ID, 닉네임, 총거래금액을 조회하는 SQL문을 작성해주세요. 결과는 총거래금액을 기준으로 오름차순 정렬해주세요.
정답 코드
-- 조건에 맞는 사용자와 총 거래금액 조회하기
SELECT B.USER_ID, B.NICKNAME, SUM(A.PRICE) AS TOTAL_SALES
FROM USED_GOODS_BOARD AS A, USED_GOODS_USER AS B
WHERE A.WRITER_ID = B.USER_ID
AND A.STATUS = "DONE"
GROUP BY B.USER_ID
HAVING SUM(A.PRICE) >= 700000
ORDER BY 3 ;
코드 해석
첫 번째 테이블은 A, 두 번째 테이블은 B로 지정해서 조인을 해 준다. 회원 ID, 닉네임, 총거래금액을 조회하는데 총거래금액은 A 테이블의 price의 합을 계산해서 TOTAL_SALES 라는 컬럼명을 준다.
이때, WHERE 절과 GROUP BY ~ HAVING 절을 써서 A 테이블의 작성자 명과 B 테이블의 회원 ID가 같고, 거래상태가 DONE이고, 총거래금액이 70만원 이상인 사람들의 결과만 출력한다. 결과는 총거래금액을 기준으로 오름차순 정렬하는 코드이다.
결과
느낀 점/어려운 점/개선점
조건문에 연산이 들어갈 땐 HAVING을 써야 하기 때문에 이번 문제에서는 WHERE절과 GROUP BY ~ HAVING 절을 둘 다 써야 해서 난이도가 좀 있었던 것 같다. 그런데 그 부분은 잘 풀어놓고 PRICE에 A.을 안 붙여서 TOTAL_SALES에 대해 에러가 났었다. 조인이 포함된 문제를 풀 땐 모든 컬럼명에 조인을 썼는지 확인해야겠다.