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

kiki·2024년 1월 2일
0

프로그래머스

목록 보기
36/78

문제 링크

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, NULL AS USER_ID, SALES_AMOUNT 
	FROM OFFLINE_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, USER_ID, SALES_AMOUNT 
	FROM ONLINE_SALE
    WHERE DATE_FORMAT(SALES_DATE,'%Y-%m')='2022-03'
    ORDER BY SALES_DATE, PRODUCT_ID, USER_ID

JOIN만 알고있었는데 UNION으로 테이블을 세로로 합칠 수 있었다. 마치 DataFrame의 concat에서 axis를 정해주는 것과 같은...
그리고 offline_sale 테이블에는 user_id 칼럼이 없는데, union을 위해서는 칼럼 갯수가 동일해야하기 때문에 user_id 칼럼을 NULL as user_id로 대체한다.
그리고 계속 헷갈리는데, date_format에서 퍼센트!!!!를 꼭 써라 채원아

정리

  • UNION: 테이블을 세로로 합치는 방법.UNION ALL혹은 UNION DISTINCT와 같이 사용한다. DISTINCT는 중복을 제거해준다.
  • NULL 칼럼 생성: 테이블을 합칠 때 없는 칼럼을 맞춰주기 위해 NULL AS ~와 같이 NULL 칼럼을 만들어준다.
  • DATE_FORMAT: DATE_FORMAT(DATE, "%Y-%m-%d")와 같이 퍼센트!! 잊지말자

0개의 댓글