[Programmers SQL Test] 오프라인/온라인 판매 데이터 통합하기

아리엘 (Ariel)·2023년 4월 7일
2

SQL

목록 보기
2/8

오프라인/온라인 판매 데이터 통합하기


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

  • 2022년 3월 판매 날짜, 상품ID, 유저ID, 판매량
  • OFFLINE_SALE 테이블의 판매 데이터의 USER_ID 값은 NULL 로 표시
  • 판매일을 기준으로 오름차순
  • 판매일이 같다면 상품 ID를 기준으로 오름차순
  • 상품ID까지 같다면 유저 ID를 기준 으로 오름차순

📌 정답

(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 ALL
(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 1, 2, 3 ;

📌 시행착오

# SELECT DATE_FORMAT(A.SALES_DATE, '%Y-%m-%d') AS SALES_DATE, A.PRODUCT_ID, USER_ID, A.SALES_AMOUNT
# FROM ONLINE_SALE A LEFT OUTER JOIN OFFLINE_SALE B
#     ON A.SALES_DATE = B.SALES_DATE AND
#         A.PRODUCT_ID = B.PRODUCT_ID
# WHERE DATE_FORMAT(A.SALES_DATE, '%Y-%m') = '2022-03'
# ORDER BY 1, 2, 3 ;

💡포인트

  • NULL AS USER_ID : NULL 빈 열 추가
  • DATE_FORMAT(SALES_DATE, '%Y-%m') = '2022-03' : 2022-03만 찾기
  • () UNION ALL ()
    : 괄호 쓰기
    : 상위 SQL문과 하위 SQL문의 열 개수가 동일해야 UNION이 가능하다.
    : 다를 경우 NULL 열을 추가하여 대체하는 방법이 있다.
    : MYSQL은 FULL OUTER JOIN이 없으므로 (LEFT OUTER JOIN) UNION (RIGHT OUTER JOIN) 으로 가능하다.
  • ORDER BY 1, 2, 3 : ORDER BY 절은 가장 마지막에 기재



💡 질문과 피드백 사항은 댓글에 편하게 남겨주시기 바랍니다.
❤️ 도움이 되셨다면 공감 부탁드립니다.

profile
Data Analyst / Engineer

0개의 댓글