๐Ÿ”ฅ SQL

[D+22][SQL] ์ด๋™ ํ‰๊ท ์„ ํ™œ์šฉํ•œ ๋‚ ์งœ๋ณ„ ๋งค์ถœ ํ‰๊ท  ๊ตฌํ•˜๊ธฐ - AVG() OVER (), ROWS UNBOUNDED PRECEDING

๊น€์ˆฎ์—‰ 2024. 5. 29. 15:07

 

โœ๏ธ STUDY INDEX 
01. ์ด๋™ ํ‰๊ท  ๊ฐœ๋…

02. ์ด๋™ ํ‰๊ท  ๊ด€๋ จ ํ•จ์ˆ˜ ๋ฐ ๊ตฌ๋ฌธ 

 

01. ์ด๋™ ํ‰๊ท  ๊ฐœ๋… 


์ด๋™ ํ‰๊ท (Moving Average)์€ ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ์˜ ๋…ธ์ด์ฆˆ๋ฅผ ์ค„์ด๊ณ  ๋ฐ์ดํ„ฐ์˜ ํŒจํ„ด์„ ์ดํ•ดํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํ†ต๊ณ„์  ๊ธฐ๋ฒ•์ด๋‹ค. ์ผ์ •ํ•œ ๊ธฐ๊ฐ„ ๋™์•ˆ์˜ ๋ฐ์ดํ„ฐ์˜ ํ‰๊ท ์„ ๊ณ„์‚ฐํ•˜์—ฌ ๊ฐ ์‹œ์ ์—์„œ์˜ ๊ฐ’์„ ๊ตฌํ•ฉ๋‹ˆ๋‹ค.

์ด๋™ ํ‰๊ท ์€ ์ฃผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
1. ๋ฐ์ดํ„ฐ ์Šค๋ฌด๋”ฉ: ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ์˜ ๋ณ€๋™์„ฑ์„ ์ค„์—ฌ์„œ ํŒจํ„ด์„ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ๋ณด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
2. ์ถ”์„ธ ๋ถ„์„: ๋ฐ์ดํ„ฐ์˜ ์žฅ๊ธฐ์ ์ธ ์ถ”์„ธ๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
3. ์ฃผ์‹ ๋ฐ ๊ธˆ์œต ์‹œ์žฅ ๋ถ„์„: ์ฃผ์‹ ๊ฐ€๊ฒฉ์˜ ์›€์ง์ž„์„ ๋ถ„์„ํ•˜์—ฌ ๋งค์ˆ˜ ๋ฐ ๋งค๋„ ์‹œ์  ๊ฒฐ์ •์— ๋„์›€์„ ์ค๋‹ˆ๋‹ค.

ChatGPT  ์ด๋™ํ‰๊ท '์— ๋Œ€ํ•œ ๋‹ต๋ณ€ ์ผ๋ถ€ ๋ฐœ์ทŒ (2024-05-29)

 

 

์š”์•ฝํ•˜์ž๋ฉด, ์ด๋™ ํ‰๊ท (Moving Average)์€ ๋ฐ์ดํ„ฐ์˜ ์ถ”์„ธ์™€ ํŒจํ„ด์„ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ฒ•์ด์—์š”!

์‹ค๋ฌด์—์„œ๋Š” ๋‹จ์ˆœํžˆ ๋‚ ์งœ๋ณ„ ๋งค์ถœ ๋ฆฌํฌํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋งค์ถœ ๋ณ€๋™์„ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์—, 7์ผ ํ‰๊ท  ๋งค์ถœ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ด๋™ ํ‰๊ท ์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ Mysql๋กœ ์ด๋™ ํ‰๊ท ์„ ํ™œ์šฉํ•œ ๋‚ ์งœ๋ณ„ ๋งค์ถœ ํ‰๊ท ์„ ๊ตฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!

 

 

02. ์ด๋™ ํ‰๊ท  ๊ด€๋ จ ํ•จ์ˆ˜ ๋ฐ ๊ตฌ๋ฌธ -  ์œˆ๋„์šฐ ํ•จ์ˆ˜, ROWS


SQL์—์„œ ์ด๋™ํ‰๊ท ์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์œˆ๋„์šฐ ํ•จ์ˆ˜์™€ ROWS UNBOUNDED PRECEDING์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 

ํ‰๊ท ์„ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์œˆ๋„์šฐ ํ•จ์ˆ˜๋Š” AVG() OVER (ORDER BY ์นผ๋žŒ ROWS ...)๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

ROWS UNBOUNDED PRECEDING์€ ์ฃผ๋กœ ์œˆ๋„์šฐ ํ•จ์ˆ˜์™€ ํ•จ๊ป˜ ํ™œ์šฉํ•˜๊ณ  ํŠน์ • ๋ฒ”์œ„์˜ ํ–‰์„ ์ง€์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•ด์š”. ์ €๋Š” ์ด๋ฒˆ์— ์ฒ˜์Œ ์•Œ๊ฒŒ ๋๋Š”๋ฐ ๋ˆ„์  ๊ณ„์‚ฐํ•  ๋•Œ ์ž์ฃผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•˜๋‹ˆ ์ตํ˜€๋‘์„ธ์š”!

๊ธฐ๋ณธ ๋ฌธ๋ฒ• ๊ตฌ์กฐ์™€ ํ™œ์šฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™์•„์š”. 

๊ธฐ๋ณธ ๋ฌธ๋ฒ• ์˜๋ฏธ 
ROWS BETWEEN lower_bound AND upper_bound lower_bound ๋ถ€ํ„ฐ upper_bound๊นŒ์ง€ ํ–‰ ํฌํ•จ 
UNBOUNDED PRECEDING ํ˜„์žฌ ํ–‰ ์ด์ „ ๋ชจ๋“  ํ–‰ ํฌํ•จ 
n PRECEDING ํ˜„์žฌ ํ–‰ ์ด์ „ n๊ฐœ ํ–‰ ํฌํ•จ 
CURRENT ROW ํ˜„์žฌ ํ–‰ ํฌํ•จ 
n FOLLOWING ํ˜„์žฌ ํ–‰ ์ดํ›„ n๊ฐœ ํ–‰ ํฌํ•จ 
UNBOUNDED FOLLOWING ํ˜„์žฌ ํ–‰ ์ดํ›„ ๋ชจ๋“  ํ–‰ ํฌํ•จ 
# 7์ผ ์ด๋™ ํ‰๊ท  ๊ตฌํ•˜๊ธฐ(1) 
SELECT date, 
	SUM(sales) AS total_sales,
    AVG(SUM(sales)) OVER (ORDER BY date ROWS BETWEEN PRECEDING 6 AND CURRENT ROW) AS moving_avg
    # ๋‚ ์งœ ๊ธฐ์ค€ ์ •๋ ฌ, 6์ผ์ „๋ถ€ํ„ฐ ํ˜„์žฌ๊นŒ์ง€์˜ ํ–‰ ์‚ฌ์šฉ
FROM ํ…Œ์ด๋ธ” ๋ช…
GROUP BY date 
ORDER BY date;
# 7์ผ ์ด๋™ ํ‰๊ท  ๊ตฌํ•˜๊ธฐ(2) - 7์ผ์ด ์•„๋‹Œ ๋ฐ์ดํ„ฐ๋Š” null๋กœ ๋ฐ˜ํ™˜ํ•˜์—ฌ ์ œ์™ธํ•ด์ฃผ๊ธฐ

SELECT date, 
	SUM(sales) as total_sales, 
    AVG(SUM(sales) OVER (ORDER BY date ROWS BETWEEN PRECEDING 6 AND CURRENT ROW) AS moving_avg, 
    CASE WHEN 7 = COUNT(*)
    	THEN AVG(SUM(sales)) OVER (ORDER BY date ROWS BETWEEN PRECEDING 6 AND CURRENT ROW)
        ELSE NULL END AS moving_avg_strinct
FROM ํ…Œ์ด๋ธ”๋ช… 
GROUP BY date 
ORDER BY date;

 

ChatGPT์—๊ฒŒ 1๋ฒˆ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด ๋‹ฌ๋ผ๊ณ  ํ–ˆ๋Š”๋ฐ, ์ง‘๊ณ„ํ•œ๋‹ค๋ฉด ์šฐ์ธก์ฒ˜๋Ÿผ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ฌ ๊ฑฐ์˜ˆ์š”. 1~6์ผ๊นŒ์ง€๋Š” ํ‰๊ท ์„ ์ˆœ์ฐจ์ ์œผ๋กœ ๊ณ„์‚ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— 01-07 ์ดํ›„๋ถ€ํ„ฐ๊ฐ€ ์ •ํ™•ํ•œ 7์ผ๊ฐ„์˜ ์ด๋™ ํ‰๊ท ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๊ฒ ๋„ค์š”! ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•ด์„œ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ฆฐ๋‹ค๋ฉด ๋งค์ถœ ์ถ”์„ธ๋‚˜ ์ฆ๊ฐ๋ฅ ์„ ๋” ์ง๊ด€์ ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์„๋“ฏํ•ฉ๋‹ˆ๋‹ค. 


[ 2024. 5. 29 Today I Learned ] ์˜ค๋Š˜์€ SQL์„ ํ™œ์šฉํ•ด์„œ ์ด๋™ํ‰๊ท ์„ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณต์Šตํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์ธ ์›๋ฆฌ๋Š” ์ดํ•ดํ–ˆ์ง€๋งŒ, ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๊ฐ€ ์•„๋‹Œ ํ™œ์„ฑํ™” ์œ ์ € ๋น„์œจ, ์ฆ๊ฐ๋ฅ  ๋“ฑ์„ ๊ณ„์‚ฐํ•œ๋‹ค๋ฉด ํ›จ์”ฌ ์–ด๋ ต๊ณ  ๋ณต์žกํ•  ๊ฒƒ ๊ฐ™์•„์š”. ๋งŽ์€ ๋ณต์Šต์ด ํ•„์š”ํ•  ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ SQL ์ฑŒ๋ฆฐ์ง€ ์„ธ์…˜์„ ๋“ค์œผ๋ฉด์„œ ์ฟผ๋ฆฌ๋ฅผ ์‘์šฉํ•ด์„œ ์›ํ•˜๋Š” ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜๋Š” ๋ฒ•์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์–ด ๋„ˆ๋ฌด ์ข‹์Šต๋‹ˆ๋‹ค!๐Ÿ€ 

 

*์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ [KDT ๋ฐ์ดํ„ฐ ๋ถ„์„๊ฐ€ ์–‘์„ฑ ๊ณผ์ •] ์ค‘ SQL ์ฑŒ๋ฆฐ์ง€ ์„ธ์…˜ 2ํšŒ ์ฐจ ์ž๋ฐœ์  ๋ณต์Šต ํฌ์ŠคํŒ…์ž…๋‹ˆ๋‹ค.