본문 바로가기

SQL/프로그래머스

SQL 프로그래머스 5일차_1 UNION ALL

FULL JOIN같지만 

두개의 테이블을 빈칸까지 모두 가지올 때는 UNION ALL을 쓰자

중복값까지 모두 조회 된다.

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

 

문제

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

 

-- 코드를 입력하세요
SELECT * 
FROM 
(SELECT DATE_FORMAT(SALES_DATE,'%Y-%m-%d') AS SALES_DATE,
        PRODUCT_ID,
        USER_ID	,
        SALES_AMOUNT
 FROM ONLINE_SALE  O 
UNION ALL
SELECT DATE_FORMAT(SALES_DATE,'%Y-%m-%d') AS SALES_DATE,
        PRODUCT_ID,
        NULL  AS USER_ID, -- 빈칸은 모두 널값으로 한다.
        SALES_AMOUNT
 FROM OFFLINE_SALE ) A 
 -- UNION ALL 후에 3월달 조건이 시작되기 때문에 온라인/오프라인 전체 데이터에 조건이 대입된다. 
 WHERE MONTH(A.SALES_DATE) REGEXP '^3' -- ^시작 => 조회는 03이지만 DATE형식이라서 ^03이라하면 조회가 안된다.\
 ORDER BY SALES_DATE, PRODUCT_ID, USER_ID