λΆ„μ„ν•¨μˆ˜?

ν…Œμ΄λΈ”μ— μžˆλŠ” 데이터λ₯Ό νŠΉμ • μš©λ„λ‘œ λΆ„μ„ν•˜μ—¬ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜

 

λ³΅μž‘ν•œ 계산을 λ‹¨μˆœν•˜κ²Œ μ²˜λ¦¬ν•΄μ£ΌλŠ” ν•¨μˆ˜

쿼리 κ²°κ³Ό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

http://www.gurubee.net/lecture/2671

+ Recent posts