본문 바로가기
프로그래머스/[프로그래머스 - ORACLE] Lv.1

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

by 코딩하는 흰둥이 2023. 3. 20.
반응형


CREATE 문
CREATE TABLE ONLINE_SALE (
ONLINE_SALE_ID			NUMBER	NOT NULL,
USER_ID				NUMBER	NOT NULL,
PRODUCT_ID			NUMBER	NOT NULL,
SALES_AMOUNT			NUMBER	NOT NULL,
SALES_DATE			DATE	NOT NULL
);


CREATE TABLE OFFLINE_SALE  (
OFFLINE_SALE_ID		NUMBER	NOT NULL,
PRODUCT_ID		NUMBER	NOT NULL,
SALES_AMOUNT		NUMBER	NOT NULL,
SALES_DATE		DATE	NOT NULL
);

  • 내 풀이
SELECT
	SALES_DATE ,
	PRODUCT_ID,
	USER_ID,
	SALES_AMOUNT
FROM(
	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') LIKE '2022-03%'
	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') LIKE '2022-03%'
)
ORDER BY SALES_DATE , PRODUCT_ID , USER_ID;

LEFT JOIN을 사용하려고 보니 OFFLINE_SALE의 테이블에서 USER_ID가 NULL로 나와야한다고

UNION ALL로 변경하였다.

DBeaver에서는 

WHERE TO_CHAR(SALES_DATE , 'YYYY-MM') LIKE '2022-03%' 부분이 FROM 바깥에서 돌려도 문제가 없었는데

프로그래머스 코딩 솔루션에서는 UNION 각각에 넣어야 실행이 되었다.

댓글