프로그래머스 - SQL 연습문제 - Lv.4 - SELECT : 오프라인/온라인 판매 데이터 통합하기(틀림)

르네·2023년 10월 6일
0

SQL

목록 보기
39/63

문제

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

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

풀이

- 나의 풀이(구현 완전히는 못함)

SELECT *
FROM ONLINE_SALE AS A
     LEFT JOIN OFFLINE_SALE AS B ON A.SALES_DATE = B.SALES_DATE

- 다른 사람 풀이

(SELECT DATE_FORMAT(sales_date, "%Y-%m-%d") AS sales_date,
    product_id,
    user_id,
    sales_amount
FROM online_sale
WHERE DATE_FORMAT(sales_date, "%Y-%m") = "2022-03")

UNION

(SELECT DATE_FORMAT(sales_date, "%Y-%m-%d") AS sales_date,
    product_id,
    NULL AS user_id,
    sales_amount
FROM offline_sale
WHERE DATE_FORMAT(sales_date, "%Y-%m") = "2022-03")
ORDER BY sales_date, product_id, user_id

- 풀이 해설

첫 번째 SELECT 문 (온라인 판매 데이터):

DATE_FORMAT(sales_date, "%Y-%m-%d")은 sales_date를 "2022-03-01" 형식으로 포맷합니다.
product_id: 상품 ID를 선택합니다.
user_id: 사용자 ID를 선택합니다.
sales_amount: 판매 금액을 선택합니다.
FROM online_sale: online_sale 테이블에서 데이터를 가져옵니다.
WHERE DATE_FORMAT(sales_date, "%Y-%m") = "2022-03": 판매 날짜가 "2022-03"인 행만 선택합니다.
UNION 연산자:

첫 번째 SELECT 결과와 두 번째 SELECT 결과를 합칩니다. 중복된 행은 제거됩니다.
두 번째 SELECT 문 (오프라인 판매 데이터):

DATE_FORMAT(sales_date, "%Y-%m-%d"): 온라인 판매와 마찬가지로 판매 날짜를 "2022-03-01" 형식으로 포맷합니다.
product_id: 상품 ID를 선택합니다.
NULL AS user_id: 오프라인 판매 데이터에서는 사용자 ID가 없으므로 NULL로 표시합니다.
sales_amount: 판매 금액을 선택합니다.
FROM offline_sale: offline_sale 테이블에서 데이터를 가져옵니다.
WHERE DATE_FORMAT(sales_date, "%Y-%m") = "2022-03": 판매 날짜가 "2022-03"인 행만 선택합니다.
ORDER BY 절:

sales_date, product_id, user_id의 순서로 결과를 정렬합니다.

배운점

  • 원본 테이블에 없는 데이터를 'NULL'로 나타내기 위해서 'NULL AS user_id' 이렇게 구현하면 된다.

  • 원본 테이블의 날짜 데이터는 '2022-01-01 00:00:00' 형식이었다. 샘플 예시를 보면 '2022-03-01' 형식으로 날짜형식을 포맷팅해줘야 한다. -> DATE_FORMAT(sales_date, "%Y-%m-%d")

  • 3월의 판매 데이터를 구하는 것이므로 판매 날짜가 "2022-03"인 행만 선택 -> WHERE DATE_FORMAT(sales_date, "%Y-%m") = "2022-03"

profile
데이터분석 공부로그

0개의 댓글