YataNox
오프라인/온라인 판매 데이터 통합하기 본문
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;
'DB > Programmers SQL' 카테고리의 다른 글
아픈 동물 찾기 (0) | 2023.10.17 |
---|---|
역순 정렬하기 (0) | 2023.10.17 |
재구매가 일어난 상품과 회원 리스트 구하기 (0) | 2023.10.17 |
모든 레코드 조회하기 (0) | 2023.10.17 |
흉부외과 또는 일반외과 의사 목록 출력하기 (2) | 2023.10.17 |