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

쥬쥬스·2023년 8월 23일
0

SQL

목록 보기
43/67
post-thumbnail

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

💡 조건

  • ONLINE_SALE 테이블과 OFFLINE_SALE 테이블에서 데이터 가져오기
  • 2022년 3월의 데이터 출력
  • offline_sale 테이벌의 판매 데이터 user_id는 null로 표기
  • 판매 날짜, 상품ID, 유저ID, 판매량을 출력
  • 판매일을 기준으로 오름차순 정렬, 상품 ID를 기준으로 오름차순, 유저 ID를 기준으로 오름차순 정렬

sql 코드

(
SELECT DATE_FORMAT(ons.sales_date,'%Y-%m-%d')as sales_date, product_id, user_id, sales_amount
FROM online_sale ons
WHERE sales_date like '2022-03%'

UNION

SELECT DATE_FORMAT(off.sales_date,'%Y-%m-%d')as sales_date, product_id, NULL as user_id, sales_amount
FROM offline_sale off
WHERE sales_date like '2022-03%'
)
ORDER BY sales_date, product_id, user_id
  1. ONLINE_SALE 테이블과 OFFLINE_SALE 테이블에서 데이터 가져오기
    • 해당 문제는 테이블에서 값만 가져오면 되므로 join이 아닌 union을 사용
      union 더 알아보기
      해당 링크에서 유니온에 대해서 더 알 수 있다.

      📝 구조가 같은 두 테이블, 또는 두 조회 결과를 합하여 합집합처럼 만들어 결과를 출력
      UNION : 중복 제거 O
      UNION ALL : 중복 제거 X

  2. 2022년 3월의 데이터 출력
    • 간단하게 해당 날짜는 문자열로 취급해서 뽑아냈다
	WHERE sales_date like '2022-03%'
  1. offline_sale 테이벌의 판매 데이터 user_id는 null로 표기
    • null로 표기하고 싶은 테이블 앞에 null as user_id 로 표시
	SELECT DATE_FORMAT(off.sales_date,'%Y-%m-%d')as sales_date, 
    		product_id, NULL as user_id, sales_amount
  1. 판매 날짜, 상품ID, 유저ID, 판매량을 출력
    • 판매 날짜는 주어진 대로 표시해야하므로 DATE_FORMAT 사용
	SELECT DATE_FORMAT(ons.sales_date,'%Y-%m-%d')as sales_date, 
    		product_id, user_id, sales_amount
  1. 판매일을 기준으로 오름차순 정렬, 상품 ID를 기준으로 오름차순, 유저 ID를 기준으로 오름차순 정렬
	ORDER BY sales_date, product_id, user_id

이 문제는 offline_sale에 3월에 해당하는 데이터가 없어서 아쉽다. 결과를 더 명확하게 보기 위해서 3월 데이터도 추가되면 좋겠다.

profile
느려도... 꾸준히.....🐌

0개의 댓글