본문 바로가기

DB/Programmers SQL Kit

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

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;