본문 바로가기
SQL

[MySQL] 프로그래머스 Lv 3. 조건에 맞는 사용자와 총 거래금액 조회하기 정답풀이

by 권미정 2023. 8. 12.

문제 설명

다음은 중고 거래 게시판 정보를 담은 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_BOARDUSED_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에 대해 에러가 났었다. 조인이 포함된 문제를 풀 땐 모든 컬럼명에 조인을 썼는지 확인해야겠다.

댓글