문제설명
다음은 중고 거래 게시판 정보를 담은 USED_GOODS_BOARD 테이블과 중고 거래 게시판 첨부파일 정보를 담은 USED_GOODS_FILE 테이블입니다. USED_GOODS_BOARD 테이블은 다음과 같으며 BOARD_ID, WRITER_ID, TITLE, CONTENTS, PRICE, CREATED_DATE, STATUS, VIEWS는 게시글 ID, 작성자 ID, 게시글 제목, 게시글 내용, 가격, 작성일, 거래상태, 조회수를 의미합니다.
USED_GOODS_USER 테이블은 다음과 같으며 USER_ID, NICKNAME, CITY, STREET_ADDRESS1, STREET_ADDRESS2, TLNO는 각각 회원 ID, 닉네임, 시, 도로명 주소, 상세 주소, 전화번호를 를 의미합니다.
문제
USED_GOODS_BOARD와 USED_GOODS_USER 테이블에서 완료된 중고 거래의 총금액이 70만 원 이상인 사람의 회원 ID, 닉네임, 총거래금액을 조회하는 SQL문을 작성해주세요. 결과는 총거래금액을 기준으로 오름차순 정렬해주세요.
예시
USED_GOODS_BOARD 테이블이 다음과 같고
USED_GOODS_USER 테이블이 다음과 같을 때
결과
SQL을 실행하면 다음과 같이 출력되어야 합니다.
MySQL
SELECT B.writer_id,
U.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 B.writer_id,
U.nickname
HAVING Sum(price) >= 700000
ORDER BY 3
Oracle
SELECT B.writer_id,
U.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 B.writer_id,
U.nickname
HAVING Sum(price) >= 700000
ORDER BY 3
TIP :
1. 문제 조건이 '완료된 중고 거래' 1개와 '총금액이 70만원 이상인 사람' 이건 GORUP BY를 해서 HAVING조건으로 걸 수 있겠다고 생각 == 서브쿼리를 안쓰고 '조인을 써서 한 큐에 끝낼 수 있겠구나' 라고 생각
2. 'USED_GOODS_BOARD와 USED_GOODS_USER 테이블에서 완료된 중고 거래의' : WHERE조건으로 'STATUS'가 'DONE'인걸 먼저 거른다
3. 총금액이 70만 원 이상인 사람 : 총금액 이니까 GROUP BY를 써서 사람마다 묶어야 겠다고 생각
★ ★ ★4. GROUP BY로 묶으면 SELECT절에는 GROUP BY로 묶은 컬럼만 보이게 된다는 점!! 그래서 결과에 나오는 컬럼도 빼내기 위해 NICKNAME컬럼도 그룹바이 해버린다.
5. HAVING은 GORUP BY에서의 조건이니까 아이디를 그룹으로 하고 난 뒤 PRICE의 합을 70만원 이상으로 조건 잡는다.
'알고리즘 > SQL' 카테고리의 다른 글
[MySQL/Oracle] 즐겨찾기가 가장 많은 식당 정보 출력하기 L3 (0) | 2023.12.12 |
---|---|
[MySQL/Oracle] 대여 기록이 존재하는 자동차 리스트 구하기 L3 (0) | 2023.12.12 |
[MySQL/Oracle] 조건별로 분류하여 주문상태 출력하기 L3 (0) | 2023.12.03 |
[MySQL/Oracle] 오랜 기간 보호한 동물(2) L3 (2) | 2023.12.03 |
[MySQL/Oracle] 있었는데요 없었습니다 L3 (2) | 2023.12.03 |