프로그래밍/MySQL

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

뭉이씨 2025. 2. 10. 12:55

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/131537

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

풀이

SELECT
date_format(SALES_DATE,'%Y-%m-%d') SALES_DATE,
PRODUCT_ID,
USER_ID,
SALES_AMOUNT
FROM (
    SELECT
    SALES_DATE,
    PRODUCT_ID,
    NULL AS USER_ID,
    SALES_AMOUNT
    FROM OFFLINE_SALE OFS
    
    UNION ALL
    
    SELECT
    SALES_DATE,
    PRODUCT_ID,
    USER_ID,
    SALES_AMOUNT
    FROM ONLINE_SALE ONS
) AS S
WHERE MONTH(SALES_DATE)=3
ORDER BY SALES_DATE, PRODUCT_ID,USER_ID,SALES_AMOUNT

 

해설

  • 포인트는 UNION ALL 로 두 테이블을 합치는 것이었다. 이때, 두 테이블에서 SELECT 해오는 항목들이 같아야한다. OFFLINE_SALE 테이블에는 USER_ID 항목이 존재하지 않으므로 NULL로 넣어준다.
  • 날짜가 DATE 형식의 자료형으로 들어가 있을 때에는 MONTH(...) 형식으로 월 추출이 가능하다.
  • 날짜를 형식에 맞춰 SELECT 해주기 위해 date_format(테이블명, '%Y-%m-%d') 처리를 해주었다. %Y 대신에 %y를 사용하면 연도의 마지막 두자리만 저장된다.