🤷♀️ 문제
USED_GOODS_BOARD와 USED_GOODS_USER 테이블에서 완료된 중고 거래의 총금액이 70만 원 이상인 사람의 회원 ID, 닉네임, 총거래금액을 조회하는 SQL문을 작성해주세요. 결과는 총거래금액을 기준으로 오름차순 정렬해주세요.
ℹ️ 테이블
- 중고거래 게시판 정보 (USED_GOODS_BOARD)Column 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)Column name Type Nullable
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
✅ 답안
1. MYSQL .ver
SELECT
B.USER_ID
,B.NICKNAME
,A.SUM_PRICE AS TOTAL_SALES
FROM (
SELECT
Z.WRITER_ID
,SUM(Z.PRICE) AS SUM_PRICE
FROM USED_GOODS_BOARD Z
WHERE 1=1
AND Z.STATUS = 'DONE'
GROUP BY WRITER_ID
) A
LEFT JOIN USED_GOODS_USER B ON (B.USER_ID = A.WRITER_ID)
WHERE 1=1
AND A.SUM_PRICE >= 700000
ORDER BY A.SUM_PRICE
;
2. ORACLE .ver
SELECT
B.USER_ID
,B.NICKNAME
,A.SUM_PRICE AS TOTAL_SALES
FROM (
SELECT
Z.WRITER_ID
,SUM(Z.PRICE) AS SUM_PRICE
FROM USED_GOODS_BOARD Z
WHERE 1=1
AND Z.STATUS = 'DONE'
GROUP BY WRITER_ID
) A
LEFT JOIN USED_GOODS_USER B ON (B.USER_ID = A.WRITER_ID)
WHERE 1=1
AND A.SUM_PRICE >= 700000
ORDER BY A.SUM_PRICE
;
🌟 CHECK POINT
- WHERE VS HAVING
WHERE HAVING 테이블에서 직접 데이터 필터링 테이블에서 생성된 그룹 데이터를 필터링 행 연산 열 연산 조건에 따라 필터링된 데이터만 조회 필터 조건을 적용하기 전에 모든 데이터 조회 WHERE절에 집계 함수 사용 불가 HAVING절에 집계 함수 사용 가능 SELECT, UPDATE, DELETE문에 사용 가능 SELECT문에만 사용 가능 GROUP BY절 필요X GROUP BY 절 필수
'공부 > CodingTest' 카테고리의 다른 글
자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (0) | 2023.07.20 |
---|---|
[프로그래머스/SQL] 조건에 맞는 사용자 정보 조회하기 (0) | 2023.07.19 |
[프로그래머스/SQL] 조회수가 가장 많은 중고거래 게시판의 첨부파일 조회하기 (0) | 2023.07.18 |
[프로그래머스/SQL] 진료과별 총 예약 횟수 출력하기 (0) | 2023.07.18 |
[프로그래머스/SQL] 자동차 평균 대여 기간 구하기 (0) | 2023.07.17 |