/*
[๋ฌธ์ ]
์จ๋ผ์ธ ์ผํ๋ชฐ์ 2023๋
์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ์ฌ ๋ค์์ ๊ตฌํ์์ค:
1. ๊ฐ ์์ผ๋ณ ์ด ์ฃผ๋ฌธ ๊ฑด์
2. ๊ฐ ์์ผ๋ณ ํ๊ท ์ฃผ๋ฌธ ๊ธ์ก
3. ์ฃผ๋ง(ํ ,์ผ)๊ณผ ํ์ผ์ ๋งค์ถ ๋น๊ต
๊ฒฐ๊ณผ๋ ์์ผ ์์๋๋ก ์ ๋ ฌํ์์ค.
[ํ
์ด๋ธ ๊ตฌ์กฐ]
orders: order_id, customer_id, order_date, amount, status
*/
-- 1. ๊ฐ ์์ผ๋ณ ์ด ์ฃผ๋ฌธ ๊ฑด์, ๊ฐ ์์ผ๋ณ ํ๊ท ์ฃผ๋ฌธ ๊ธ์ก
SELECT DAYOFWEEK(ORDER_DATE) ORDER_DATE_WEEKDAY_NUM
, CASE DAYOFWEEK(ORDER_DATE)
WHEN 1 THEN '์ผ์์ผ'
WHEN 2 THEN '์์์ผ'
WHEN 3 THEN 'ํ์์ผ'
WHEN 4 THEN '์์์ผ'
WHEN 5 THEN '๋ชฉ์์ผ'
WHEN 6 THEN '๊ธ์์ผ'
WHEN 7 THEN 'ํ ์์ผ'
END ORDER_DATE_WEEKDAY
, COUNT(*) TOTAL_CNT
, ROUND(AVG(AMOUNT),0) AVG_TOTAL_AMOUNT
FROM ORDERS
WHERE YEAR(ORDER_DATE) = '2023'
GROUP BY DAYOFWEEK(ORDER_DATE)
ORDER BY ORDER_DATE_WEEKDAY_NUM ASC
;
-- 3. ์ฃผ๋ง(ํ ,์ผ)๊ณผ ํ์ผ์ ๋งค์ถ ๋น๊ต(์ฃผ๋ฌธ๊ฑด์, ๋งค์ถ ํฉ๊ณ, ์ผ ํ๊ท ๋งค์ถ)
-- ์ฃผ๋ฌธ๊ฑด์, ๋งค์ถ ํฉ๊ณ, ์ผ ํ๊ท ๋งค์ถ ํฉ๊ณ
SELECT CASE
WHEN DAYOFWEEK(ORDER_DATE) IN (1,7) THEN '์ฃผ๋ง'
ELSE 'ํ์ผ'
END ORDER_DATE_WEEK_NY
, COUNT(*) ORDER_CNT
, SUM(AMOUNT) TOTAL_AMOUNT
, ROUND(AVG(AMOUNT),0) AVG_AMOUNT
FROM ORDERS
GROUP BY CASE
WHEN DAYOFWEEK(ORDER_DATE) IN (1,7) THEN '์ฃผ๋ง'
ELSE 'ํ์ผ'
END
ORDER BY CASE WHEN ORDER_DATE_WEEK_NY = 'ํ์ผ' THEN 1 ELSE 2 END
;