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