[SQL] 오프라인/온라인 판매 데이터 통합하기 (프로그래머스/ Level 4)

AI 공부하기·2024년 1월 19일

SQL 문제풀이

목록 보기
10/18

오프라인/온라인 판매 데이터 통합하기
https://school.programmers.co.kr/learn/courses/30/lessons/131537

1. 문제 설명

문제
ONLINE_SALE 테이블과 OFFLINE_SALE 테이블에서 2022년 3월의 오프라인/온라인 상품 판매 데이터의 판매 날짜, 상품ID, 유저ID, 판매량을 출력하는 SQL문을 작성해주세요. OFFLINE_SALE 테이블의 판매 데이터의 USER_ID 값은 NULL 로 표시해주세요. 결과는 판매일을 기준으로 오름차순 정렬해주시고 판매일이 같다면 상품 ID를 기준으로 오름차순, 상품ID까지 같다면 유저 ID를 기준으로 오름차순 정렬해주세요.

예시
예를 들어 ONLINE_SALE 테이블이 다음과 같고

ONLINE_SALE_ID USER_ID PRODUCT_ID SALES_AMOUNT SALES_DATE
1 1 3 2 2022-02-25
2 4 4 1 2022-03-01
4 2 2 2 2022-03-02
3 6 3 3 2022-03-02
5 5 5 1 2022-03-03
6 5 7 1 2022-04-06
OFFLINE_SALE 테이블이 다음과 같다면

OFFLINE_SALE_ID PRODUCT_ID SALES_AMOUNT SALES_DATE
1 1 2 2022-02-21
4 1 2 2022-03-01
3 3 3 2022-03-01
2 4 1 2022-03-01
5 2 1 2022-03-03
6 2 1 2022-04-01
각 테이블의 2022년 3월의 판매 데이터를 합쳐서, 정렬한 결과는 다음과 같아야 합니다.

SALES_DATE PRODUCT_ID USER_ID SALES_AMOUNT
2022-03-01 1 NULL 2
2022-03-01 3 NULL 3
2022-03-01 4 NULL 1
2022-03-01 4 4 1
2022-03-02 2 2 2
2022-03-02 3 6 3
2022-03-03 2 NULL 1
2022-03-03 5 5 1

2. 정답 쿼리문 예시 1

SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') SALES_DATE, 
        PRODUCT_ID,
        USER_ID,
        SALES_AMOUNT

FROM ONLINE_SALE
WHERE SALES_DATE >= '2022-03-01' and SALES_DATE < '2022-04-01'

UNION

SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') SALES_DATE, 
        PRODUCT_ID,
        NULL AS USER_ID,
        SALES_AMOUNT
FROM OFFLINE_SALE
WHERE SALES_DATE >= '2022-03-01' and SALES_DATE < '2022-04-01'

ORDER BY SALES_DATE, PRODUCT_ID, USER_ID

3. 쿼리문 설명

정답 쿼리문 예시 1

  1. ONLINE_SALE 테이블과 OFFLINE_SALE 테이블에서 3월의 판매 데이터를 가져와야 한다. 따라서 JOIN을 사용하는 것이 아니라 UNION을 사용한다. 또한 OFFLINE_SALE의 USER_ID를 NULL 처리를 해야하기 때문에 NULL AS USER ID 처럼 작성한다.
  2. WHERE 사용하여 조건 처리
  3. ORDER BY를 사용하여 정렬
profile
이전 tistory 블로그 주소: https://dohwai-ai.tistory.com/ tistory는 정리하기가 너무 불편해서 velog로 블로그를 이전했습니다.

0개의 댓글