[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/PRGMS] 299310 ์—ฐ๋„๋ณ„ ๋Œ€์žฅ๊ท  ํฌ๊ธฐ์˜ ํŽธ์ฐจ ๊ตฌํ•˜๊ธฐ (์„œ๋ธŒ์ฟผ๋ฆฌ, Window ํ•จ์ˆ˜)

2025. 2. 7. 17:54ยท๐Ÿ’ป ์•Œ๊ณ ๋ฆฌ์ฆ˜/SQL

๋ฌธ์ œ

https://school.programmers.co.kr/learn/courses/30/lessons/299310

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr

 

๋ถ„ํ™”๋œ ์—ฐ๋„(YEAR), ๋ถ„ํ™”๋œ ์—ฐ๋„๋ณ„ ๋Œ€์žฅ๊ท  ํฌ๊ธฐ์˜ ํŽธ์ฐจ(YEAR_DEV), ๋Œ€์žฅ๊ท  ๊ฐœ์ฒด์˜ ID(ID) ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” SQL ๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ๋ถ„ํ™”๋œ ์—ฐ๋„๋ณ„ ๋Œ€์žฅ๊ท  ํฌ๊ธฐ์˜ ํŽธ์ฐจ๋Š” ๋ถ„ํ™”๋œ ์—ฐ๋„๋ณ„ ๊ฐ€์žฅ ํฐ ๋Œ€์žฅ๊ท ์˜ ํฌ๊ธฐ - ๊ฐ ๋Œ€์žฅ๊ท ์˜ ํฌ๊ธฐ๋กœ ๊ตฌํ•˜๋ฉฐ ๊ฒฐ๊ณผ๋Š” ์—ฐ๋„์— ๋Œ€ํ•ด ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ณ  ๊ฐ™์€ ์—ฐ๋„์— ๋Œ€ํ•ด์„œ๋Š” ๋Œ€์žฅ๊ท  ํฌ๊ธฐ์˜ ํŽธ์ฐจ์— ๋Œ€ํ•ด ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด์ฃผ์„ธ์š”.

 

 

ํ’€์ด์— ์•ž์„œ ...

Window ํ•จ์ˆ˜

: ์œˆ๋„์šฐ ํ•จ์ˆ˜๋ž€ ํ–‰๊ณผ ํ–‰ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์‰ฝ๊ฒŒ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ํ•จ์ˆ˜์ด๋‹ค.

๊ธฐ์กด SQL์˜ ์ง‘๊ณ„ํ•จ์ˆ˜๊ฐ€ ์ปฌ(์—ด)๋Ÿผ ๊ฐ„ ์—ฐ์‚ฐ์—๋Š” ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹์œผ๋‚˜ ๋ ˆ์ฝ”๋“œ(ํ–‰) ๊ฐ„์˜ ์—ฐ์‚ฐ์€ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•จ์— ๋”ฐ๋ผ ์œˆ๋„์šฐ ํ•จ์ˆ˜๊ฐ€ ๋งŒ๋“ค์–ด์กŒ๋‹ค.

 

์•„๋ž˜์™€ ๊ฐ™์ด ํฌ๊ฒŒ 5๊ฐ€์ง€๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

  • ๊ทธ๋ฃน ๋‚ด ์ˆœ์œ„ : RANK, DENSE_RANK, ROW_NUMBER
  • ๊ทธ๋ฃน ๋‚ด ์ง‘๊ณ„ : SUM, MAX, MIN, AVG, COUNT
  • ๊ทธ๋ฃน ๋‚ด ํ–‰ ์ˆœ์„œ : FIRST_VALUE, LAST_VALUE, (LEAD :์˜ค๋ผํด)
  • ๊ทธ๋ฃน ๋‚ด ๋น„์œจ : CUME_DIST, PERCENT_RANK, NTILE, RATIO_TO_REPORT
  • ํ†ต๊ณ„ ๋ถ„์„ : REGR_SLOPE, REGR_INTERCEPT ...

์œˆ๋„์šฐ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•˜์—ฌ OVER ์ ˆ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ด ์•ˆ์— ๋‹ค์–‘ํ•œ ์˜ต์…˜ ์ œ๊ณต์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

→ PARTITION BY, ORDER BY, ROWS BETWEEN ~ AND ~ , CURRENT ROW .. ๋“ฑ๋“ฑ

 

์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

SELECT WINDOW_FUNCTION (ARGUMENTS) 
OVER ([PARTION BY ์กฐ๊ฑด] [ORDER BY] [ROWS BETWEEN a AND b ])
FROM TABLE

 

 

 

๋ฌธ์ œ ํ’€์ด 1 - ์„œ๋ธŒ์ฟผ๋ฆฌ ์‚ฌ์šฉ

1. ์—ฐ๋„๋ณ„ ๊ฐ€์žฅ ํฐ ๋Œ€์žฅ๊ท ์˜ ํฌ๊ธฐ

select YEAR(differentiation_date) as year, max(size_of_colony) as size
from ecoli_data
group by YEAR(differentiation_date)

year() ๋ฅผ ํ†ตํ•ด ์—ฐ๋„๋กœ casting ํ•ด ์ค€ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ฃนํ™”(group by)ํ•œ ํ›„ ๊ฐ€์žฅ ํฐ ๋Œ€์žฅ๊ท ์„ ์ฐพ๋Š”๋‹ค.

 

2. ํŽธ์ฐจ ๊ตฌํ•˜๊ธฐ 

1์„ ์„œ๋ธŒ์ฟผ๋ฆฌ๋กœ ํ™œ์šฉํ•˜์—ฌ ์กฐ๊ฑด์— ๋งŒ์กฑํ•˜๋Š” ๊ฐ’๋“ค์„ ๋ฝ‘์•„์˜จ๋‹ค.

 

์ฝ”๋“œ

select YEAR(differentiation_date) as year, abs(size_of_colony - size) as year_dev, id 
from ecoli_data ecoli join 
(select YEAR(differentiation_date) as year, max(size_of_colony) as size
from ecoli_data
group by YEAR(differentiation_date)
) dev
on YEAR(ecoli.differentiation_date) = dev.year
order by year, year_dev

 

์„œ๋ธŒ์ฟผ๋ฆฌ ๋ง๊ณ ๋Š” ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์„๊นŒ?

์œ„์—์„œ์˜ ์œˆ๋„์šฐ ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•ด๋ณด์ž!

 

๋ฌธ์ œ ํ’€์ด 2 - Window ํ•จ์ˆ˜ ์‚ฌ์šฉ

์„œ๋ธŒ์ฟผ๋ฆฌ๋กœ ๋„ฃ์—ˆ๋˜ ๋ถ€๋ถ„์„ window ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜์ •ํ•œ๋‹ค.

์ฝ”๋“œ

select year(differentiation_date) as year, 
	max(size_of_colony) over (partition by year(differentiation_date)) - size_of_colony as year_dev, id
from ecoli_data
order by year, year_dev

 

ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•ด์กŒ๋‹ค~

'๐Ÿ’ป ์•Œ๊ณ ๋ฆฌ์ฆ˜ > SQL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/PRGMS] 301650 ํŠน์ • ์„ธ๋Œ€์˜ ๋Œ€์žฅ๊ท  ์ฐพ๊ธฐ (์ž๊ธฐ ์ฐธ์กฐ, ์„œ๋ธŒ ์ฟผ๋ฆฌ)  (0) 2025.02.17
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/PRGMS] 299307/301649 ๋Œ€์žฅ๊ท ์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ ๋ถ„๋ฅ˜ํ•˜๊ธฐ 1, 2 (CASE WHEN , WINDOW ํ•จ์ˆ˜)  (8) 2025.02.10
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/PRGMS] 298519 ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ฌผ๊ณ ๊ธฐ๋ณ„ ์ˆ˜์™€ ์ตœ๋Œ€ ๊ธธ์ด ๊ตฌํ•˜๊ธฐ - SQL ๊ณ ๋“์  Kit  (4) 2025.02.06
'๐Ÿ’ป ์•Œ๊ณ ๋ฆฌ์ฆ˜/SQL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/PRGMS] 301650 ํŠน์ • ์„ธ๋Œ€์˜ ๋Œ€์žฅ๊ท  ์ฐพ๊ธฐ (์ž๊ธฐ ์ฐธ์กฐ, ์„œ๋ธŒ ์ฟผ๋ฆฌ)
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/PRGMS] 299307/301649 ๋Œ€์žฅ๊ท ์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ ๋ถ„๋ฅ˜ํ•˜๊ธฐ 1, 2 (CASE WHEN , WINDOW ํ•จ์ˆ˜)
  • [ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/PRGMS] 298519 ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ฌผ๊ณ ๊ธฐ๋ณ„ ์ˆ˜์™€ ์ตœ๋Œ€ ๊ธธ์ด ๊ตฌํ•˜๊ธฐ - SQL ๊ณ ๋“์  Kit
.๋ฐ.
.๋ฐ.
  • .๋ฐ.
    Do IT
    .๋ฐ.
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • All (40)
      • ๐Ÿ’ป ์•Œ๊ณ ๋ฆฌ์ฆ˜ (21)
        • PS (16)
        • SQL (4)
        • ์ด๋ก  (5)
      • ๐ŸŽˆcapstone (2)
      • ๐Ÿ’ชBackend (12)
        • Django (8)
        • Spring (4)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    PS
    SQL
    bruteforce
    ์Šค์ผ€์ค„๋Ÿฌ
    ์‘๋‹ตํ˜•์‹
    ETL
    BOJ
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    ์žฌ๊ท€
    ์ฝ”ํ…Œ
    ๋ฐฑ์ค€
    springscheduler
    resposneentity
    ๋‹ค์ค‘์กฐ์ธ
    ์ž๋ฐ”
    ํŒŒ์ด์ฌ
    programmers
    ์Šคํ”„๋ง๋ฐฐ์น˜
    Django
    responsecustomclass
    python
    apiresponse
    BFS
    crud
    Batch
    ์„œ๋ธŒ์ฟผ๋ฆฌ
    ๋ฌธ์ œํ’€์ด
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    MYSQL
    windowํ•จ์ˆ˜
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
.๋ฐ.
[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค/PRGMS] 299310 ์—ฐ๋„๋ณ„ ๋Œ€์žฅ๊ท  ํฌ๊ธฐ์˜ ํŽธ์ฐจ ๊ตฌํ•˜๊ธฐ (์„œ๋ธŒ์ฟผ๋ฆฌ, Window ํ•จ์ˆ˜)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”