반응형

@notepad_jj2

츄르사려고 코딩하는집사입니다.


1. [프로그래머스/SQL] 조건에 맞는 사용자 정보 조회하기 오라클(Oracle)

 

2. 문제 출처

https://school.programmers.co.kr/learn/courses/30/lessons/164668

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

3. 문제

다음은 중고 거래 게시판 정보를 담은 USED_GOODS_BOARD 테이블과 중고 거래 게시판 첨부파일 정보를 담은 USED_GOODS_FILE 테이블입니다. USED_GOODS_BOARD 테이블은 다음과 같으며 BOARD_ID, WRITER_ID, TITLE, CONTENTS, PRICE, CREATED_DATE, STATUS, VIEWS는 게시글 ID, 작성자 ID, 게시글 제목, 게시글 내용, 가격, 작성일, 거래상태, 조회수를 의미합니다.

Column nameTypeNullable

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, 닉네임, 시, 도로명 주소, 상세 주소, 전화번호를 를 의미합니다.

Column nameTypeNullable

USER_ID VARCHAR(50) FALSE
NICKANME 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문을 작성해주세요. 결과는 총거래금액을 기준으로 오름차순 정렬해주세요.

 

예시

USED_GOODS_BOARD 테이블이 다음과 같고

BOARD_IDWRITER_IDTITLECONTENTSPRICECREATED_DATESTATUSVIEWS

B0001 zkzkdh1 캠핑의자 가벼워요 깨끗한 상태입니다. 2개 25000 2022-11-29 SALE 34
B0002 miyeon89 벽걸이 에어컨 엘지 휘센 7평 100000 2022-11-29 SALE 55
B0003 dhfkzmf09 에어팟 맥스 에어팟 맥스 스카이 블루 색상 판매합니다. 450000 2022-11-26 DONE 67
B0004 sangjune1 파파야나인 포르쉐 푸쉬카 예민하신분은 피해주세요 30000 2022-11-30 DONE 78
B0005 zkzkdh1 애플워치7 애플워치7 실버 스텐 45미리 판매합니다. 700000 2022-11-30 DONE 99

USED_GOODS_USER 테이블이 다음과 같을 때

USER_IDNICKNAMECITYSTREET_ADDRESS1STREET_ADDRESS2TLNO

cjfwls91 점심만금식 성남시 분당구 내정로 185 501호 01036344964
zkzkdh1 후후후 성남시 분당구 내정로 35 가동 1202호 01032777543
spdlqj12 크크큭 성남시 분당구 수내로 206 2019동 801호 01087234922
xlqpfh2 잉여킹 성남시 분당구 수내로 1 001-004 01064534911
dhfkzmf09 찐찐 성남시 분당구 수내로 13 A동 1107호 01053422914

SQL을 실행하면 다음과 같이 출력되어야 합니다.

USER_IDNICKNAMETOTAL_SALES

zkzkdh1 후후후 700000

 

4. 풀이

- 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기준으로 오름차순 정렬을 하면 된다.

 

5. 소스 코드

    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

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기