본문 바로가기
알고리즘/SQL

[MySQL/Oracle] 조건에 맞는 사용자와 총 거래금액 조회하기 L3 ★

by 모두의 향연 2023. 12. 3.
728x90
반응형
문제설명

다음은 중고 거래 게시판 정보를 담은 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만원 이상으로 조건 잡는다.

 

728x90
반응형