[프로그래머스, Oracle] 오프라인/온라인 판매 데이터 통합하기
포스트
취소

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

문제

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

  • 예시

예를 들어 ONLINE_SALE 테이블이 다음과 같고

ONLINE_SALE_IDUSER_IDPRODUCT_IDSALES_AMOUNTSALES_DATE
11322022-02-25
24412022-03-01
42222022-03-02
36332022-03-02
55512022-03-03
65712022-04-06

OFFLINE_SALE 테이블이 다음과 같다면

OFFLINE_SALE_IDPRODUCT_IDSALES_AMOUNTSALES_DATE
1122022-02-21
4122022-03-01
3332022-03-01
2412022-03-01
5212022-03-03
6212022-04-01

각 테이블의 2022년 3월의 판매 데이터를 합쳐서, 정렬한 결과는 다음과 같아야 합니다.

SALES_DATEPRODUCT_IDUSER_IDSALES_AMOUNT
2022-03-011NULL2
2022-03-013NULL3
2022-03-014NULL1
2022-03-01441
2022-03-02222
2022-03-02363
2022-03-032NULL1
2022-03-03551

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
(
    SELECT TO_CHAR(SALES_DATE, 'YYYY-MM-DD') AS SALES_DATE, 
        PRODUCT_ID, 
        USER_ID, 
        SALES_AMOUNT 
    FROM ONLINE_SALE 
    WHERE TO_CHAR(SALES_DATE, 'YYYY-MM-DD') >= '2022-03-01' AND TO_CHAR(SALES_DATE, 'YYYY-MM-DD') < '2022-04-01'
)
UNION ALL
(
    SELECT TO_CHAR(SALES_DATE, 'YYYY-MM-DD') AS SALES_DATE, 
        PRODUCT_ID, 
        NULL AS USER_ID, 
        SALES_AMOUNT 
    FROM OFFLINE_SALE 
    WHERE TO_CHAR(SALES_DATE, 'YYYY-MM-DD') >= '2022-03-01' AND TO_CHAR(SALES_DATE, 'YYYY-MM-DD') < '2022-04-01'
) 
ORDER BY SALES_DATE, PRODUCT_ID, USER_ID
;

설명

  • UNION: 쿼리의 결과를 합침. 중복 데이터를 제거함.
  • UNION ALL: 쿼리의 결과를 합침. 중복 데이터를 제거하지 않음.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

[Leetcode, PostgreSQL] 180. Consecutive Numbers

[Leetcode, PostgreSQL] 185. Department Top Three Salaries