1) ๋ฌธ์ ์ค๋ช
- ๋ค์์ ์ด๋ ์๋ฅ ์ผํ๋ชฐ์ ๊ฐ์ ํ ํ์ ์ ๋ณด๋ฅผ ๋ด์ USER_INFO ํ ์ด๋ธ๊ณผ ์จ๋ผ์ธ ์ํ ํ๋งค ์ ๋ณด๋ฅผ ๋ด์ ONLINE_SALE ํ ์ด๋ธ ์ ๋๋ค.
- USER_INFO ํ ์ด๋ธ์ ์๋์ ๊ฐ์ ๊ตฌ์กฐ๋ก ๋์ด์์ผ๋ฉฐ USER_ID, GENDER, AGE, JOINED๋ ๊ฐ๊ฐ ํ์ ID, ์ฑ๋ณ, ๋์ด, ๊ฐ์ ์ผ์ ๋ํ๋ ๋๋ค.
Column name | Type | Nullable |
USER_ID | INTEGER | FALSE |
GENDER | TINYINT(1) | TRUE |
AGE | INTEGER | TRUE |
JOINED | DATE | FALSE |
- GENDER ์ปฌ๋ผ์ ๋น์ด์๊ฑฐ๋ 0 ๋๋ 1์ ๊ฐ์ ๊ฐ์ง๋ฉฐ 0์ธ ๊ฒฝ์ฐ ๋จ์๋ฅผ, 1์ธ ๊ฒฝ์ฐ๋ ์ฌ์๋ฅผ ๋ํ๋ ๋๋ค.
- 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 ์กฐํฉ์ ๋ํด์๋ ํ๋์ ํ๋งค ๋ฐ์ดํฐ๋ง ์กด์ฌํฉ๋๋ค.
2) ๋ฌธ์
- USER_INFO ํ ์ด๋ธ๊ณผ ONLINE_SALE ํ ์ด๋ธ์์ 2021๋ ์ ๊ฐ์ ํ ์ ์ฒด ํ์๋ค ์ค ์ํ์ ๊ตฌ๋งคํ ํ์์์ ์ํ์ ๊ตฌ๋งคํ ํ์์ ๋น์จ(=2021๋ ์ ๊ฐ์ ํ ํ์ ์ค ์ํ์ ๊ตฌ๋งคํ ํ์์ / 2021๋ ์ ๊ฐ์ ํ ์ ์ฒด ํ์ ์)์ ๋ , ์ ๋ณ๋ก ์ถ๋ ฅํ๋ SQL๋ฌธ์ ์์ฑํด์ฃผ์ธ์.
- ์ํ์ ๊ตฌ๋งคํ ํ์์ ๋น์จ์ ์์์ ๋๋ฒ์งธ์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผํ๊ณ , ์ ์ฒด ๊ฒฐ๊ณผ๋ ๋ ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์๊ณ ๋ ์ด ๊ฐ๋ค๋ฉด ์์ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
3) ์์
- ์๋ฅผ ๋ค์ด USER_INFO ํ ์ด๋ธ์ด ๋ค์๊ณผ ๊ฐ๊ณ
USER_ID | GENDER | AGE | JOINED |
1 | 1 | 26 | 2021-06-01 |
2 | NULL | NULL | 2021-06-25 |
3 | 0 | NULL | 2021-06-30 |
4 | 0 | 31 | 2021-07-03 |
5 | 1 | 25 | 2022-01-09 |
6 | 1 | 33 | 2022-02-14 |
- ONLINE_SALE ์ด ๋ค์๊ณผ ๊ฐ๋ค๋ฉด
ONLINE_SALE_ID | USER_ID | PRODUCT_ID | SALES_AMOUNT | SALES_DATE |
1 | 1 | 54 | 1 | 2022-01-01 |
2 | 1 | 3 | 2 | 2022-01-25 |
3 | 4 | 34 | 1 | 2022-01-30 |
4 | 6 | 253 | 3 | 2022-02-03 |
5 | 2 | 31 | 2 | 2022-02-09 |
6 | 5 | 35 | 1 | 2022-02-14 |
7 | 5 | 57 | 1 | 2022-02-18 |
- 2021๋ ์ ๊ฐ์ ํ ํ์์ USER_ID๊ฐ 1, 2, 3, 4 ์ธ ํ์๋ค๋ก ์ด 4๋ช ์ ๋๋ค.
- ONLINE_SALE ํ ์ด๋ธ์์ ํด๋น ํ์๋ค์ ๋ํ ํ๋งค ๋ฐ์ดํฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ONLINE_SALE_ID | USER_ID | PRODUCT_ID | SALES_AMOUNT | SALES_DATE |
1 | 1 | 54 | 1 | 2022-01-01 |
2 | 1 | 3 | 2 | 2022-01-25 |
3 | 4 | 34 | 1 | 2022-01-30 |
5 | 2 | 31 | 2 | 2022-02-09 |
- ๊ทธ๋ฌ๋ฏ๋ก ๋ , ์ ๋ณ๋ก ์ํ์ ๊ตฌ๋งคํ ํ์์์ ์ํ์ ๊ตฌ๋งคํ ํ์์ ๋น์จ์ ๊ตฌํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ ฌํ๋ฉด ๋ค์๊ณผ ๊ฐ์์ผ ํฉ๋๋ค.
YEAR | MONTH | PUCHASED_USERS | PUCHASED_RATIO |
2022 | 1 | 2 | 0.5 |
2022 | 2 | 1 | 0.3 |
4) ํ์ด
SELECT
YEAR(SALES_DATE) AS "YEAR",
MONTH(SALES_DATE) AS "MONTH",
COUNT(DISTINCT USER_ID) AS "PUCHASED_USERS",
ROUND(
COUNT(DISTINCT USER_ID) / (SELECT COUNT(*)
FROM USER_INFO
WHERE YEAR(JOINED) = 2021)
, 1) AS "PUCHASED_RATIO"
FROM ONLINE_SALE
WHERE USER_ID IN (SELECT USER_ID
FROM USER_INFO
WHERE YEAR(JOINED) = 2021)
GROUP BY YEAR, MONTH
ORDER BY YEAR, MONTH;
[Reference]
๋ฐ์ํ