Window function

μœˆλ„μš° ν•¨μˆ˜

의미

  • ν–‰κ³Ό 행간을 비ꡐ, μ—°μ‚°, μ •μ˜ν•˜κΈ°μœ„ν•œ ν•¨μˆ˜

  • λΆ„μ„ν•¨μˆ˜ λ˜λŠ” μˆœμœ„ν•¨μˆ˜λΌκ³ λ„ 함

  • group by λ˜λŠ” order byλ₯Ό 톡해 μ–»μ–΄μ§€λŠ” 값듀을 μ‚¬μš©ν•˜κ³  싢을 λ•Œ, group by ν•˜κΈ° μ „ 칼럼 κ°’λ“€μ΄λž‘ 같이 ν•œλ²ˆμ— select ν•˜κ³  싢을 λ•Œ μ‚¬μš©ν•  수 있음

  • ν…Œμ΄λΈ” 내뢀에 μœˆλ„λΌκ³  λΆ€λ₯΄λŠ” λ²”μœ„λ₯Ό μ •μ˜ν•˜κ³ , ν•΄λ‹Ή λ²”μœ„ 내뢀에 ν¬ν•¨λœ 값을 νŠΉμ • λ ˆμ½”λ“œμ—μ„œ 자유둭게 μ‚¬μš©ν•˜λ €κ³  λ„μž…ν•¨

  • OVER(...) μ—μ„œ μœˆλ„ λ²”μœ„λ₯Ό μ •μ˜ν•¨

  • μ„œλΈŒμΏΌλ¦¬λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ„ 수 있음. μ„œλΈŒμΏΌλ¦¬μ˜ 역할이 ν•„μš”ν•œλ° μ’€ κ°„λ‹¨ν•˜κ²Œ λ§Œλ“  λŠλ‚Œ..?

μ‚¬μš©

  • SELECT WINDOW_FUNCTION(ARGUMENTS) OVER([PARTITION BY 컬럼] [ORDER BY 컬럼] [WINDOWING 절]) FROM ν…Œμ΄λΈ”λͺ…;

WINDOW_FUNCTION

집계 ν•¨μˆ˜

  • SUM : 합계

  • MAX : μ΅œλŒ“κ°’

  • MIN : μ΅œμ†Ÿκ°’

  • AVG : 평균

  • COUNT : 개수

μˆœμœ„ ν•¨μˆ˜

  • RANK() : λ“±μˆ˜. λ™μ μžκ°€ 있으면 그만큼 숫자λ₯Ό κ±΄λ„ˆ λœ€. 1λ“±,1λ“±,1λ“±,4λ“±,5λ“±, ... μ΄λŸ°μ‹

  • DENSE_RANK() : λ“±μˆ˜μΈλ°, λ™μ μžκ°€ μžˆμ–΄λ„ μˆ«μžλŠ” 이어감. 1λ“±,1λ“±,1λ“±,2λ“±,3λ“±, ... μ΄λŸ°μ‹

  • ROW_NUMBER() : 1λΆ€ν„° μˆœμ„œλŒ€λ‘œ Auto Increment 값을 뢀여함

μˆœμ„œ ν•¨μˆ˜

  • FIRST_VALUE(column_name) : κ°€μž₯ μ²˜μŒμ— λ‚˜μ˜¨ 값을 κ°€μ Έμ˜΄

  • LAST_VALUE(column_name) : κ°€μž₯ 뒀에 λ‚˜μ˜¨ 값을 κ°€μ Έμ˜΄

  • LAG(column_name, number) : ν˜„μž¬ 행을 κΈ°μ€€μœΌλ‘œ number만큼 μ•žμ˜ 행을 μΆ”μΆœν•¨

  • LEAD(column_name, number) : ν˜„μž¬ 행을 κΈ°μ€€μœΌλ‘œ number만큼 λ’€μ˜ 행을 μΆ”μΆœν•¨

μœˆλ„μš° μ§€μ •

  • μœˆλ„μš° ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•  λ²”μœ„λ₯Ό μ •μ˜ν•˜λŠ” 것

  • OVER() ꡬ문으둜 지정함

  • OVER ꡬ문의 κ΄„ν˜Έ μ•ˆμ— λ“€μ–΄κ°€λŠ” 것듀은 μ•„λž˜μ™€ 같이 있으며, μ„Έκ°œλ₯Ό μ‘°ν•©ν•΄μ„œ μ‚¬μš©ν• μˆ˜λ„ 있음

PARTITION BY

  • OVER(PARTITION BY(column_name))

  • column_name을 κΈ°μ€€μœΌλ‘œ group by ν•˜λŠ” 것과 λΉ„μŠ·ν•˜κ²Œ λ¬Άμž„

ORDER BY

  • OVER(ORDER BY column_name [DESC])

  • DESCκ°€ 있으면 λ‚΄λ¦Όμ°¨μˆœ, μ—†μœΌλ©΄ μ˜€λ¦„μ°¨μˆœ

μœˆλ„μš° ν”„λ ˆμž„ μ§€μ • ROWS

  • μ–΄λ–€ κΈ°μ€€μœΌλ‘œ 순차적인 μ—΄λ“€μ˜ 집합을 λ§Œλ“¦

  • ROWS BETWEEN start AND end

  • startλΆ€ν„° end κΉŒμ§€μ— μ†ν•˜λŠ” μ—΄λ“€μ˜ μ§‘ν•©

  • start, end에 λ“€μ–΄κ°€λŠ” 것(맀크둜?μƒμˆ˜?)

    • CURRENT ROW : ν˜„μž¬μ˜ ν–‰

    • n PRECEDING : nν–‰ μ•ž

    • n FOLLOWING : nν–‰ λ’€

    • UNBOUNDED PRECEDING : 이전 ν–‰ μ „λΆ€

    • UNBOUNDED FOLLOWING : 이후 ν–‰ μ „λΆ€

μ°Έκ³ 

  • https://for-my-wealthy-life.tistory.com/48

  • 데이터 뢄석을 μœ„ν•œ SQL λ ˆμ‹œν”Ό p.97~105

Last updated