๐ข ๋ณธ ํฌ์คํ ์ ํ์ฉ๋๋ ๊ธฐ๋ณธ ๋ฌธ์ ๋ฐ ์๋ฃ ์ถ์ฒ๋
ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ฉํ
์คํธ ์ฐ์ต,
https://school.programmers.co.kr/learn/challenges?page=1&languages=mysql%2Coracle์์ ๋ฐํ๋๋ค.
โ ๋ฌธ์
๋ฌธ์ ์ค๋ช
๋ค์์ ์ด๋ ์๋ฅ ์ผํ๋ชฐ์ ์จ๋ผ์ธ ์ํ ํ๋งค ์ ๋ณด๋ฅผ ๋ด์ ONLINE_SALE ํ ์ด๋ธ๊ณผ ์คํ๋ผ์ธ ์ํ ํ๋งค ์ ๋ณด๋ฅผ ๋ด์ OFFLINE_SALE ํ ์ด๋ธ ์ ๋๋ค. ONLINE_SALE ํ ์ด๋ธ์ ์๋์ ๊ฐ์ ๊ตฌ์กฐ๋ก ๋์ด์์ผ๋ฉฐ ONLINE_SALE_ID, USER_ID, PRODUCT_ID, SALES_AMOUNT, SALES_DATE๋ ๊ฐ๊ฐ ์จ๋ผ์ธ ์ํ ํ๋งค ID, ํ์ ID, ์ํ ID, ํ๋งค๋, ํ๋งค์ผ์ ๋ํ๋ ๋๋ค.
Column name | Type | Nullable |
ONLINE_SALE_ID | INTEGER | FALSE |
USER_ID | INTEGER | FALSE |
PRODUCT_ID | INTEGER | FALSE |
SALES_AMOUNT | INTEGER | FALSE |
SALES_DATE | DATE | FALSE |
๋์ผํ ๋ ์ง, ํ์ ID, ์ํ ID ์กฐํฉ์ ๋ํด์๋ ํ๋์ ํ๋งค ๋ฐ์ดํฐ๋ง ์กด์ฌํฉ๋๋ค. OFFLINE_SALE ํ ์ด๋ธ์ ์๋์ ๊ฐ์ ๊ตฌ์กฐ๋ก ๋์ด์๋ฉฐ OFFLINE_SALE_ID, PRODUCT_ID, SALES_AMOUNT, SALES_DATE๋ ๊ฐ๊ฐ ์คํ๋ผ์ธ ์ํ ํ๋งค ID, ์ํ ID, ํ๋งค๋, ํ๋งค์ผ์ ๋ํ๋ ๋๋ค.
Column name | Type | Nullable |
OFFLINE_SALE_ID | INTEGER | FALSE |
PRODUCT_ID | INTEGER | FALSE |
SALES_AMOUNT | INTEGER | FALSE |
SALES_DATE | DATE | FALSE |
๋์ผํ ๋ ์ง, ์ํ ID ์กฐํฉ์ ๋ํด์๋ ํ๋์ ํ๋งค ๋ฐ์ดํฐ๋ง ์กด์ฌํฉ๋๋ค.
๋ฌธ์
ONLINE_SALE ํ ์ด๋ธ๊ณผ OFFLINE_SALE ํ ์ด๋ธ์์ 2022๋ 3์์ ์คํ๋ผ์ธ/์จ๋ผ์ธ ์ํ ํ๋งค ๋ฐ์ดํฐ์ ํ๋งค ๋ ์ง, ์ํID, ์ ์ ID, ํ๋งค๋์ ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์. OFFLINE_SALE ํ ์ด๋ธ์ ํ๋งค ๋ฐ์ดํฐ์ USER_ID ๊ฐ์ NULL ๋ก ํ์ํด์ฃผ์ธ์. ๊ฒฐ๊ณผ๋ ํ๋งค์ผ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์๊ณ ํ๋งค์ผ์ด ๊ฐ๋ค๋ฉด ์ํ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์, ์ํID๊น์ง ๊ฐ๋ค๋ฉด ์ ์ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
โ ํ์ด
๋ฌธ์ ์๊ตฌ์ฌํญ
ONLINE_SALE ํ ์ด๋ธ๊ณผ OFFLINE_SALE ํ ์ด๋ธ์์ > ํ ์ด๋ธ ๋ณํฉ
2022๋ 3์์ ์คํ๋ผ์ธ/์จ๋ผ์ธ ์ํ ํ๋งค ๋ฐ์ดํฐ์ ํ๋งค ๋ ์ง, ์ํID, ์ ์ ID, ํ๋งค๋์ ์ถ๋ ฅ > ์กฐ๊ฑด1
OFFLINE_SALE ํ ์ด๋ธ์ ํ๋งค ๋ฐ์ดํฐ์ USER_ID ๊ฐ์ NULL ๋ก ํ์ > ์ปฌ๋ผ ์์ฑ
ํ๋งค์ผ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ > ์ ๋ ฌ์กฐ๊ฑด1
ํ๋งค์ผ์ด ๊ฐ๋ค๋ฉด ์ํ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ > ์ ๋ ฌ์กฐ๊ฑด2
์ํID๊น์ง ๊ฐ๋ค๋ฉด ์ ์ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌ > ์ ๋ ฌ์กฐ๊ฑด3
ํ์ด์๋ UNION์ผ๋ก ์จ,์คํ๋ผ์ธ ํ๋งค ๋ฐ์ดํฐ๋ฅผ ๋ณํฉํ๋๋ฐํ ์ด๋ธ ๊ฐ ์ค๋ณต๋๋ ๋ฐ์ดํฐ๊ฐ ์๋ค๊ณ ๋ฌธ์ ์ ๋ช ์๋์ด ์์ผ๋ฏ๋ก union all์ ์ฌ์ฉํด๋ ๋ฌด๋ฐฉํ๋ค.FROM์ ์ ์๋ธ์ฟผ๋ฆฌ๋ก ๋ฃ์ผ๋ ค๋ค๊ฐ WITH์ ํ์ฉํด์ ์์ ํ ์ด๋ธ T1์ ์์ฑํ๋ค.
WITH T1 AS (
SELECT SALES_DATE, PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM ONLINE_SALE
UNION
SELECT SALES_DATE, PRODUCT_ID, NULL AS USER_ID, SALES_AMOUNT
FROM OFFLINE_SALE)
SELECT DATE_FORMAT(SALES_DATE, '%Y-%m-%d') AS SALES_DATE,
PRODUCT_ID, USER_ID, SALES_AMOUNT
FROM T1
WHERE DATE_FORMAT(SALES_DATE, '%Y-%m') = '2022-03'
ORDER BY 1, 2, 3