λΆμν¨μ?
ν μ΄λΈμ μλ λ°μ΄ν°λ₯Ό νΉμ μ©λλ‘ λΆμνμ¬ κ²°κ³Όλ₯Ό λ°ννλ ν¨μ
볡μ‘ν κ³μ°μ λ¨μνκ² μ²λ¦¬ν΄μ£Όλ ν¨μ
쿼리 κ²°κ³ΌSetμ λμμΌλ‘ κ³μ°μ μννλ ν¨μ
SELECT μ μμ μν
FROM, WHERE, GROUP BY μ μμ μ¬μ© λΆκ°
ORDER BY ꡬ문μμλ μ¬μ© κ°λ₯
λΆμν¨μ | μ§κ³ν¨μ |
λΆμ ν¨μλ μ§κ³ κ²°κ³Όλ₯Ό κ° νλ§λ€ 보μ¬μ€λ€. | μ§κ³ν¨μλ μ¬λ¬ν λλ ν μ΄λΈ μ 체 νμΌλ‘λΆν° κ·Έλ£Ήλ³λ‘ μ§κ³νμ¬ κ²°κ³Όλ₯Ό λ°ννλ€. |
μμν¨μ?
μμλ₯Ό ꡬνλ ν¨μ.
RANKν¨μ?
νΉμ λ²μ(PARTITION) λ΄μμ μμλ₯Ό ꡬν μλ μκ³ , μ 체 λ°μ΄ν°μ λν μμλ₯Ό ꡬν μλ μλ€.
λμΌν κ°μ λν΄μλ λμΌν μμλ₯Ό λΆμ¬νκ² λλ€.
DENSE_RANKν¨μ?
RANKμ μ μ¬νλ, λμΌν μμλ₯Ό νλμ 건μλ‘ μ·¨κΈνλ€.
RANKλ 1, 2, 3μμλ‘ νκΈ°νμ§λ§, DENSE_RANKλ 1, 1, 3 μμλ₯Ό λΆμ¬νλ€. (1μκ° λκ°μ΄λ 2μ μμ΄ 3μλ‘ λμ΄κ°)
ROW_NUMBERν¨μ?
RANK, DENSE_RANKκ° λμΌν κ°μ λν΄μλ λμΌν μμλ₯Ό λΆμ¬νλλ° λ°ν΄, ROW_NUMBERλ λμΌν κ°μ΄λΌλ κ³ μ ν μμλ₯Ό λΆμ¬νλ€.
κ°μ κ°μ λν΄μ μ΄λ€ κ²°κ³Όκ° λ¨Όμ λμ¬μ§ μμλ₯Ό μ νκ³ μΆλ€λ©΄ ORDER BYλ₯Ό κ°μ΄ κΈ°μ¬νλ©΄ λλ€.
* μμν¨μμ νΉμ§
ORDER BYλ μλ΅ν μ μλ€.
WINDOWING μ μ μ¬μ© ν μ μλ€.
κ·Έλ£Ή λ΄ μ§κ³(AGGREGATE) κ΄λ ¨ ν¨μ
λΆμν¨μλ‘λ μ¬μ© κ°λ₯νλ€.
SUM : νν°μ λ³ μλμ°μ λμ ν©κ³λ₯Ό ꡬν μ μλ€.
* λΆμν¨μ OVERμ μμμ ORDER BYμ μ μ¬μ©νλ©΄ ORDER BY μ μ 컬λΌμ κΈ°μ€μΌλ‘ λμ λμ΄ κ³μ° λλ€
MAX : νν°μ λ³ μλμ°μ μ΅λκ°μ ꡬν μ μλ€.
MIN : νν°μ λ³ μλμ°μ μ΅μκ°μ ꡬν μ μλ€.
AVG : νν°μ λ³ ν΅κ³κ°μ ꡬν μ μλ€.
COUNT :
windowν¨μ? (=λΆμν¨μ, μμν¨μ)
λΆμν¨μ μ€μμ μλμ°μ (WINDOWNING μ )μ μ¬μ©νλ ν¨μ
μλμ°μ μ μ¬μ©νλ©΄ PARTITION BY μ μ λͺ μλ κ·Έλ£Ήμ μ’ λ μΈλΆμ μΌλ‘ κ·Έλ£Ήν ν μ μλ€.
μλμ°μ μ λΆμν¨μμ€μμ μΌλΆ(AVG, COUNT, SUM, MAX, MIN)λ§ μ¬μ© ν μ μλ€.
GROUP BY ꡬ문과 λ³ννμ¬ μ¬μ©ν μ μλ€ (μλΈμΏΌλ¦¬μλ μ¬μ© κ°λ₯)
μ’ λ₯
1. κ·Έλ£Ή λ΄ μμ(RANK) κ΄λ ¨ ν¨μ: RANK, DENSE_RANK, ROW_NUMBER
2. κ·Έλ£Ή λ΄ μ§κ³(AGGREGATE) κ΄λ ¨ ν¨μ : SUM, MAX, MIN, AVG, COUNT (sql serverλ OVER μ μ OREDER BY μ§μ X)
3. κ·Έλ£Ή λ΄ ν μμ κ΄λ ¨ ν¨μ : FIRST_VALUE, LAST_VALUE, LAG, LEAD (μ€λΌν΄μμλ§ μ§μ)
4. κ·Έλ£Ή λ΄ λΉμ¨ κ΄λ ¨ ν¨μ : CUME_DIST, PERCENT_RANK, NTILE, RATIO_TO_REPORT
5. μ ν λΆμμ ν¬ν¨ν ν΅κ³ λΆμ ν¨μ
νμ
SELECT WINDOW_FUNCTION(ARGUMENTS:μΈμ)
OVER (PARTITION BY μΉΌλΌ ORDER BY WINDOWINGμ )
FROM ν
μ΄λΈλͺ
;
ARGUMENTS(μΈμ) : ν¨μμ λ°λΌ 0 ~ Nκ° μΈμκ° μ§μ λ μ μλ€.
OVER : λΆμν¨μμμ λνλ΄λ ν€μλ =~μκ²
PARTITION BY μ : μ 체 μ§ν©μ κΈ°μ€μ μν΄ μκ·Έλ£ΉμΌλ‘ λλ μ μλ€. =group byμ μ μ¬ν κΈ°λ₯
WINDOWING μ : WINDOWING μ μ ν¨μμ λμμ΄ λλ ν κΈ°μ€μ λ²μλ₯Ό κ°λ ₯νκ² μ§μ ν μ μλ€. (sql server μμλ μ§μνμ§ μμ)
WINDOWINGμ
β ROWS : νμ μλ₯Ό μ ν
UNBOUNDED PRECEDING : 무νν μμ ν
PRECEDING : μ΄μ μ ν
CURRENT ROW : νμ¬ νμΌ κ²½μ°
FOLLOWING : λ€μ λμ€λ ν
UNBOUNDED FOLLOWING : 무νν νμ ν
β‘ RANGE : κ°μ λ²μ μ ν
κ·Έλ£Ή λ΄ ν μμ κ΄λ ¨ ν¨μ
*oracleμμλ§ μ§μ
FIRST_VALUE
νν°μ λ³ μλμ°μμ κ°μ₯ λ¨Όμ λμ¨ κ°μ ꡬν μ μλ€.
sql server μμλ μ§μνμ§ μμ.
MIN ν¨μλ₯Ό μ΄μ©ν΄λ κ°μ κ²°κ³Όλ₯Ό μ»μ μ μμ.
FIRST_VALUE λ 곡λ λ±μλ₯Ό μΈμ νμ§ μκ³ μ²μ λμ¨ νμ μ²λ¦¬νκΈ° λλ¬Έμ΄λ€.
LAST_VALUE
νν°μ λ³ μλμ°μμ κ°μ₯ λ¨Όμ λμ€μ λμ¨ κ°μ ꡬν μ μλ€.
sql server μμλ μ§μνμ§ μμ.
MAX ν¨μλ₯Ό μ΄μ©ν΄λ κ°μ κ²°κ³Όλ₯Ό μ»μ μ μμ.
LAG
νν°μ λ³ μλμ°μμ μ΄μ λͺ λ²μ§Έ νμ κ°μ κ°μ Έμ¬ μ μλ€.
sql server μμλ μ§μνμ§ μμ.
LAG ν¨μλ 3κ°μ μΈμκΉμ§ μ¬μ©ν μ μλ€.
LAG(SAL, 2, 0) <-- λλ²μ§Έ μΈμλ λͺ λ²μ§Έ μμ νμ κ°μ Έμ¬μ§ κ²°μ νλ κ²μ΄κ³ (λν΄νΈλ 1. μ¬κΈ°μλ 2μ μ§μ νμΌλκΉ 2λ²μ§Έ μμ μλ νμ κ°μ Έμ€λ κ²), μΈλ²μ§Έ μΈμλ νν°μ § 첫 λ²μ§Έ νμ κ²½μ° κ°μ Έμ¬ λ°μ΄ν°κ° μμ΄ NULL κ°μ΄ λ€μ΄μ€λλ°, μ΄ κ²½μ° λ€λ₯Έ κ°μΌλ‘ λ°κΎΈμ΄μ€ μ μλ€. NVL/ ISNULL κ³Ό κ°μ κΈ°λ₯.
LEAD
νν°μ λ³ μλμ°μμ μ΄ν λͺ λ²μ§Έ νμ κ°μ κ°μ Έμ¬ μ μλ€.
sql server μμλ μ§μνμ§ μμ.
LAG μ²λΌ LEAD ν¨μλ 3κ°μ μΈμκΉμ§ μ¬μ©ν μ μλ€.
κ·Έλ£Ή λ΄ λΉμ¨ κ΄λ ¨ ν¨μ
CUME_DIST
νν°μ λ³ μλμ°μ μ 체건μμμ νμ¬ νλ³΄λ€ μκ±°λ κ°μ 건μμ λν λμ λ°±λΆμ¨μ ꡬνλ€.
sql server μμλ μ§μνμ§ μμ.
PERCENT_RANK
νν°μ λ³ ν¨μλ₯Ό μ΄μ©ν΄μ νν°μ λ³ μλμ°μμ μ μΌ λ¨Όμ λμ€λ κ²μ 0μΌλ‘, μ μΌ λ¦κ² λμ€λ κ²μ 1λ‘ νμ¬, νμ μμλ³ λ°±λΆμ¨μ ꡬνλ€. (κ°μ΄ μλλΌ νμ μμλ³ λ°±λΆμ¨μ΄λ€....)
sql server μμλ μ§μνμ§ μμ.
NTILE
νν°μ λ³ μ 체 건μλ₯Ό ARGUMENT κ°μΌλ‘ Nλ±λΆν κ²°κ³Όλ₯Ό ꡬν μ μλ€.
NTILE(4) μ μλ―Έλ 14λͺ μ νμμ 4κ° μ‘°λ‘ λλλ€λ μλ―Έμ΄λ€.
14λͺ μ 4κ°μ μ§ν©μΌλ‘ λλλ©΄ λͺ«μ΄ 3, λλ¨Έμ§κ° 2κ° λλ€.
λλ¨Έμ§ λ λͺ μ μμ μ‘°λΆν° ν λΉλμ΄ 4λͺ + 4λͺ + 3λͺ + 3λͺ μΌλ‘ μ‘°λ₯Ό λλκ² λλ€.
RATIO_TO_REPORT
νν°μ λ΄ μ 체 SUM(컬λΌ) κ°μ λν νλ³ μ»¬λΌ κ°μ λ°±λΆμ¨μ μμμ μΌλ‘ ꡬν μ μλ€.
κ²°κ³Όκ°μ > 0 & <= 1 μ λ²μλ₯Ό κ°μ§λ€.
κ°λ³ ratio μ ν©μ ꡬνλ©΄ 1μ΄ λλ€.
sql server μμλ μ§μνμ§ μμ.
μ°Έκ³ κ°μ : https://youtu.be/2ec7S5tlGSI
'κ°μΈκ³΅λΆ > SQL' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
20. λνλ―Όκ΅ μ§μλ³ μκΆ λΆμν΄λ³΄κΈ° (+μ€λ₯ν΄κ²°) (0) | 2021.10.04 |
---|---|
18. WINDOWSν¨μ μ°μ΅λ¬Έμ (0) | 2021.10.02 |
10. Oracle μ€κ°μ°μ΅λ¬Έμ (0) | 2021.09.23 |
09. Oracle μ€κ°μ°μ΅λ¬Έμ (0) | 2021.09.22 |
08. Oracle μ€κ°μ°μ΅λ¬Έμ (0) | 2021.09.21 |