오프라인/온라인 판매 데이터 통합하기
https://school.programmers.co.kr/learn/courses/30/lessons/131537
- ONLINE_SALE과 OFFLINE_SALE 테이블에서 상품의 판매날짜, 상품ID, 유저ID, 판매량을 조회한다.
단, 2022년도 3월의 상품이어야하며, OFFLINE_SALE의 유저 ID는 NULL로 표시한다.
판매일 기준 오름차, 상품 id 기준 오름차, 유저 id 기준 오름차 정렬한다.
1. 두 테이블을 UNION ALL 해야한다.
2. OFFLINE_SALES엔 user_id가 없으므로 조회할때 NULL을 user_id로 alias해준다.
3. 두 테이블의 2022년 3월 항목을 조회해서 UNION 해준것을 기준에 맞게 정렬해서 조회한다.
- SQL
mysql : SELECT march_sale.sales_date, march_sale.product_id, march_sale.user_id, march_sale.sales_amount
FROM
(
SELECT DATE_FORMAT(sales_date, '%Y-%m-%d') 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') sales_date, product_id, NULL user_id, sales_amount
FROM OFFLINE_SALE
WHERE DATE_FORMAT(sales_date, '%Y-%m') = '2022-03'
) as march_sale
ORDER BY march_sale.sales_date ASC, march_sale.product_id ASC, march_sale.user_id ASC;
oracle : SELECT sales_date, product_id, user_id, sales_amount
FROM
(
SELECT TO_CHAR(sales_date, 'yyyy-mm-dd') sales_date, product_id, user_id, sales_amount
FROM ONLINE_SALE
WHERE TO_CHAR(sales_date, 'yyyy-mm') = '2022-03'
UNION ALL
SELECT TO_CHAR(sales_date, 'yyyy-mm-dd') sales_date, product_id, NULL user_id, sales_amount
FROM OFFLINE_SALE
WHERE TO_CHAR(sales_date, 'yyyy-mm') = '2022-03'
)
ORDER BY sales_date ASC, product_id ASC, user_id ASC;