ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 3. ์œˆ๋„์šฐ ํ•จ์ˆ˜ ๋ฌธ์ œ
    Programing Language/SQL 2025. 6. 14. 23:35
    ๋ฐ˜์‘ํ˜•

    ๐ŸŸข ์—ฐ์Šต๋ฌธ์ œ 3-1: ๊ธฐ๋ณธ ์ˆœ์œ„

    • RANK() : ๋™์ผํ•œ ์ ์ˆ˜์— ๋Œ€ํ•ด์„œ ๊ฐ™์€ ์ˆœ์œ„ ๋งค๊น€
      => ์ƒํ’ˆ๋ณ„ ์ด ํŒ๋งค๋Ÿ‰ ์ˆœ์œ„์— ์ ์ ˆ
    • ROW_NUMBER() : ๋™์ผํ•œ ์ ์ˆ˜์—ฌ๋„ ํ•˜๋‚˜์˜ ์ˆœ์œ„๋งŒ ๋งค๊น€
      => ์นดํ…Œ๊ณ ๋ฆฌ ๋‚ด ๊ณ ๊ฐ๋ณ„ ์ˆœ์œ„์— ์ ์ ˆ 
    [๋ฌธ์ œ]
    ์ƒํ’ˆ๋ณ„ ์ด ํŒ๋งค๋Ÿ‰์„ ๊ตฌํ•˜๊ณ , ํŒ๋งค๋Ÿ‰ ์ˆœ์œ„๋ฅผ ๋งค๊ธฐ์‹œ์˜ค.
    
    [ํ…Œ์ด๋ธ” ๊ตฌ์กฐ]
    products: product_id, product_name, category
    order_items: order_item_id, order_id, product_id, quantity
    
    -- ๋‹ต
    SELECT A.product_id, A.product_name
        , SUM(B.quantity) TOTAL_QUNAT
        , RANK() OVER(ORDER BY SUM(B.quantity) DESC) RN
    FROM PRODUCTS A
    INNER JOIN ORDER_ITEMS B
        ON A.PRODUCT_ID = B.PRODUCT_ID
    GROUP BY A.product_id, A.product_name
    ORDER BY RN DESC

     

    ์‹ค์ „๋ฌธ์ œ 3-1: ์›”๋ณ„ ๋งค์ถœ ์„ฑ์žฅ๋ฅ ๊ณผ ์ด๋™ํ‰๊ท 

    • GROUPBYํ•  ๋•Œ,  (YEAR, MONTH)๊ฐ€ ์ธ๋ฑ์Šค๋กœ ์‚ฌ์šฉ๋˜์–ด DATE_FORMAT๋ณด๋‹ค๋Š” ์—ฐ์‚ฐ๋Ÿ‰์ด ์ ์–ด ํšจ์œจ์ ์ž„
    • ์ „์›” ๋Œ€๋น„ : LAGํ•จ์ˆ˜๋ฅผ ์จ์„œ ์ง์ „๋‹ฌ ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ ORDER BY ๋Š” ์›”๋ณ„ ์˜ค๋ฆ„์ฐจ์ˆœ ์„ค์ •
    • 3๊ฐœ์›” ์ด๋™ ํ‰๊ท  : AVGํ•จ์ˆ˜ ์‚ฌ์šฉ ORDER BY ์›”๋ณ„ ์˜ค๋ฆ„์ฐจ์ˆœ ์„ค์ • ํ›„ 2๊ฐœ ์ง์ „๋‹ฌ ํ•ฉ๊ณ„ ๊ฐ€์ ธ์˜ค๊ธฐ
      • ์ง์ „๋‹ฌ ํ•ฉ๊ณ„ ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ : ROWS 2 PRECEDING(์•ž์„  ์ด์ „์˜)
    • ์—ฐ์ดˆ ๋Œ€๋น„ ๋ˆ„์  ์ฆ๊ฐ๋ฅ  : ์ „์›” ๋Œ€๋น„ ์ฆ๊ฐ์œจ๊ณผ ๋ฐฉ์‹์€ ๋™์ผํ•˜๋‚˜, ์—ฐ์ดˆ ๊ฐ’์„ FIRST_VALUE ํ•จ์ˆ˜ ์‚ฌ์šฉ
    [๋ฌธ์ œ]
    2023๋…„ ์›”๋ณ„ ๋งค์ถœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ๋‹ค์Œ์„ ๊ตฌํ•˜์‹œ์˜ค:
    1. ๊ฐ ์›”์˜ ์ด ๋งค์ถœ
    2. ์ „์›” ๋Œ€๋น„ ์ฆ๊ฐ๋ฅ  (%) : ์ „์›” ๋Œ€๋น„ ์ฆ๊ฐ๋ฅ  = (ํ˜„์žฌ์›” ๋งค์ถœ - ์ „์›” ๋งค์ถœ) / ์ „์›” ๋งค์ถœ × 100
    3. 3๊ฐœ์›” ์ด๋™ํ‰๊ท 
    4. ์—ฐ์ดˆ ๋Œ€๋น„ ๋ˆ„์  ์ฆ๊ฐ๋ฅ 
    ๊ฒฐ๊ณผ๋Š” ์›” ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌํ•˜์‹œ์˜ค.
    
    [ํ…Œ์ด๋ธ” ๊ตฌ์กฐ]
    orders: order_id, customer_id, order_date, amount, status
    
    -- ๋‹ต
    SELECT  YEAR(ORDER_DATE) ORDER_YEAR
    	, MONTH(ORDER_DATE) ORDER_MONTH
        -- ๊ฐ ์›”์˜ ์ด ๋งค์ถœ
        , SUM(AMOUNT) SALE_SUM
        -- ์ „์›” ๋Œ€๋น„ ์ฆ๊ฐ๋ฅ 
        , ROUND(
        	(SUM(AMOUNT) - LAG(SUM(AMOUNT)) OVER(ORDER BY YEAR(ORDER_DATE), MONTH(ORDER_DATE)) )
            /LAG(SUM(AMOUNT)) OVER(ORDER BY YEAR(ORDER_DATE), MONTH(ORDER_DATE)) *100
        	,2) SALE_RATE
        -- 3๊ฐœ์›” ์ด๋™ํ‰๊ท 
        , ROUND(
        	AVG(SUM(AMOUNT))
            	OVER(ORDER BY YEAR(ORDER_DATE), MONTH(ORDER_DATE))
                ROWS 2 PRECEDING)
        	,2) THREE_SALE_AVG
    	-- ์—ฐ์ดˆ ๋Œ€๋น„ ๋ˆ„์  ์ฆ๊ฐ๋ฅ 
        , ROUND(
        	(SUM(AMOUNT) - FIRST_VALUE(SUM(AMOUNT)) OVER(ORDER BY YEAR(ORDER_DATE), MONTH(ORDER_DATE)) )
            /FIRST_VALUE(SUM(AMOUNT)) OVER(ORDER BY YEAR(ORDER_DATE), MONTH(ORDER_DATE))*100
        	,2) SALE_RATE2
    FROM ORDERS
    WHERE ORDER_DATE >= '2023-01-01'
    	AND ORDER_DATE < '2024-01-01'
        AND STATUS = 'COMPLETED'
    GROUP BY YEAR(ORDER_DATE)
    	, MONTH(ORDER_DATE)
    ORDER BY ORDER_YEAR, ORDER_MONTH
    ;

     

     

    ๐ŸŽฏ ์ƒํ™ฉ๋ณ„ ์ตœ์  ์„ ํƒ

    ๐Ÿ“‹ ์ถœ๋ ฅ ํ˜•ํƒœ๊ฐ€ ์ค‘์š”ํ•œ ๊ฒฝ์šฐ

     
    sql
    -- ์š”๊ตฌ์‚ฌํ•ญ: "2023-01", "2023-02" ํ˜•ํƒœ๋กœ ์ถœ๋ ฅ
    DATE_FORMAT(ORDER_DATE, '%Y-%m') โœ…
    -- vs
    CONCAT(YEAR(ORDER_DATE), '-', LPAD(MONTH(ORDER_DATE), 2, '0')) โŒ (๋ณต์žกํ•จ)

    ๐Ÿš€ ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•œ ๊ฒฝ์šฐ

     
    sql
    -- ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ + ์ธ๋ฑ์Šค ํ™œ์šฉ
    YEAR(ORDER_DATE), MONTH(ORDER_DATE) โœ…
    -- vs  
    DATE_FORMAT(ORDER_DATE, '%Y-%m') โŒ (๋ฌธ์ž์—ด ์—ฐ์‚ฐ ๋ถ€ํ•˜)

    ๐Ÿ“Š ์„ฑ๋Šฅ ์ฐจ์ด ์ด์œ 

    DATE_FORMAT์ด ๋А๋ฆฐ ์ด์œ :

    • ๋ฌธ์ž์—ด ๋ณ€ํ™˜ ์—ฐ์‚ฐ
    • ์ธ๋ฑ์Šค ํ™œ์šฉ๋„ ๋‚ฎ์Œ
    • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ฆ๊ฐ€

    YEAR, MONTH๊ฐ€ ๋น ๋ฅธ ์ด์œ :

    • ์ •์ˆ˜ ์—ฐ์‚ฐ
    • ๋‚ ์งœ ์ธ๋ฑ์Šค ์ง์ ‘ ํ™œ์šฉ
    • ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ 

    ๐Ÿ’ก ์‹ค๋ฌด ๊ถŒ์žฅ์‚ฌํ•ญ

     
    sql
    -- ํ™”๋ฉด ์ถœ๋ ฅ์šฉ: DATE_FORMAT ์‚ฌ์šฉ
    SELECT DATE_FORMAT(ORDER_DATE, '%Y-%m') AS SALES_MONTH
    
    -- ์ง‘๊ณ„/๋ถ„์„์šฉ: YEAR, MONTH ์‚ฌ์šฉ  
    GROUP BY YEAR(ORDER_DATE), MONTH(ORDER_DATE)

    ๊ฒฐ๋ก : ๋ฌธ์ œ์—์„œ ํŠน๋ณ„ํ•œ ์ถœ๋ ฅ ํ˜•ํƒœ๋ฅผ ์š”๊ตฌํ•˜์ง€ ์•Š์œผ๋ฉด YEAR, MONTH๊ฐ€ ๋” ํšจ์œจ์ ์ด์—์š”!

    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

Designed by Tistory.