ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1. ๋‚ ์งœ/์‹œ๊ฐ„ ์ฒ˜๋ฆฌ ๋ฌธ์ œ
    Programing Language/SQL 2025. 6. 14. 21:58
    ๋ฐ˜์‘ํ˜•

    ๐Ÿ“… 1. ๋‚ ์งœ/์‹œ๊ฐ„ ์ฒ˜๋ฆฌ ๋ฌธ์ œ

    ๐ŸŸข ์—ฐ์Šต๋ฌธ์ œ 1-1: ๊ธฐ๋ณธ ๋‚ ์งœ ์กฐํšŒ

    • ์ผ์ž๋Š” ๋ฐ์ดํ„ฐ๋Ÿ‰์ด ์ปค์ง€๋ฉด ํ•จ์ˆ˜์‚ฌ์šฉ๋ณด๋‹ค๋Š” >,<๋กœ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒŒ ์ข‹์Œ
    • ๊ทธ ๋‹ค์Œ์œผ๋กœ ์‚ฌ์šฉํ•ด๋ณผ ๋งŒํ•œ ๊ฒŒ BETWEEN, ํ•˜์ง€๋งŒ BETWEEN์€ ์‹œ๊ฐ„๋Œ€๊นŒ์ง€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ฒฝ๊ณ„๋ฅผ ์กฐ์‹ฌํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•จ
    /*
    [๋ฌธ์ œ]
    ์ฃผ๋ฌธ ํ…Œ์ด๋ธ”(orders)์—์„œ 2023๋…„ 10์›”์— ์ฃผ๋ฌธ๋œ ๋ชจ๋“  ์ฃผ๋ฌธ์˜ 
    ์ฃผ๋ฌธID, ๊ณ ๊ฐID, ์ฃผ๋ฌธ์ผ์ž๋ฅผ ์กฐํšŒํ•˜์‹œ์˜ค.
    
    [ํ…Œ์ด๋ธ” ๊ตฌ์กฐ]
    orders: order_id, customer_id, order_date, amount
    */
    
    
    -- ๋‹ต
    SELECT ORDER_ID, CUSTOMER_ID, ORDER_DATE
    FROM ORDERS
    WHERE ORDER_DATE >= '2023-10-01'
    	AND ORDER_DATE < '2023-11-01'
    ;

     

     

    ๐Ÿ”ด ์‹ค์ „๋ฌธ์ œ 1-1: ์š”์ผ๋ณ„ ๋งค์ถœ ๋ถ„์„

    • ์š”์ผ ๋ฐ์ดํ„ฐ๋Š” DAYOFWEEK ์‚ฌ์šฉํ•˜๊ธฐ
    /*
    [๋ฌธ์ œ]
    ์˜จ๋ผ์ธ ์‡ผํ•‘๋ชฐ์˜ 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
    ;
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

Designed by Tistory.