자격증πŸͺͺ/SQLD

μˆœμœ„ ν•¨μˆ˜ : ROW_NUMBER(), RANK(), DENSE_RANK()

@ENFJ 2023. 10. 30. 16:00

ROW_NUMBER() λŠ” SQLμ—μ„œ μ‚¬μš©λ˜λŠ” μœˆλ„μš° ν•¨μˆ˜ 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€.

 

ROW_NUMBER() ν•¨μˆ˜λŠ” 쿼리 κ²°κ³Ό μ§‘ν•©μ˜ 각 행에 λŒ€ν•΄ κ³ μœ ν•œ 번호 λ˜λŠ” μˆœμ„œλ₯Ό ν• λ‹Ήν•˜λŠ”λ° μ‚¬μš©λ©λ‹ˆλ‹€.

μ΄λŠ” κ²°κ³Ό μ§‘ν•© λ‚΄μ—μ„œ 행을 μˆœμ„œλŒ€λ‘œ λ‚˜μ—΄ν•˜κ±°λ‚˜ μˆœμ„œλ₯Ό 기반으둜 ν•„ν„°λ§ν•˜λŠ”λ° μœ μš©ν•©λ‹ˆλ‹€.

 

ROW_NUMBER의 경우 동점이여도, μˆœμœ„λŠ” λ‹€λ¦…λ‹ˆλ‹€.

λ ˆμ½”λ“œ(ν–‰) κ°œμˆ˜κ°€ κ²°κ΅­ μˆœμœ„ κ°œμˆ˜μ—μš”.

 

 

 

ROW_NUMBER() ν•¨μˆ˜λŠ” 주둜 OVER() 절과 ν•¨κ»˜ μ‚¬μš©λ˜λ©°, 특히 μˆœμ„œλ₯Ό μ§€μ •ν•˜λŠ” κΈ°μ€€ 열을 기반으둜 μˆœμ„œλ₯Ό ν• λ‹Ήν• λ•Œ μœ μš©ν•©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ 

SELECT employee_id, employee_name, salary, 
       ROW_NUMBER() OVER(ORDER BY salary DESC) AS rownum
FROM employees;

μœ„μ˜ SQL μΏΌλ¦¬λŠ” "employees" ν…Œμ΄λΈ”μ—μ„œ μ§μ›μ˜ 정보λ₯Ό κ²€μƒ‰ν•˜κ³ , κ·Έλ“€μ˜ κΈ‰μ—¬λ₯Ό λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μ •λ ¬ν•œ ν›„, ROW_NUMBER() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 각 μ§μ›μ—κ²Œ κΈ‰μ—¬ μˆœμ„œλ₯Ό ν• λ‹Ήν•©λ‹ˆλ‹€.

OVER(ORDER BY salary DESC) 뢀뢄은 ROW_NUMBER() ν•¨μˆ˜κ°€ μ–΄λ–€ 열을 κΈ°μ€€μœΌλ‘œ μˆœμ„œλ₯Ό ν• λ‹Ήν• μ§€ μ§€μ •ν•©λ‹ˆλ‹€.

 

μ΄λŸ¬ν•œ μœˆλ„μš° ν•¨μˆ˜λŠ” μ’…μ’… 뢄석 및 보고 μΏΌλ¦¬μ—μ„œ μ‚¬μš©λ˜λ©°, κ²°κ³Ό μ§‘ν•©μ˜ μˆœμ„œλ₯Ό μ •μ˜ν•˜κ±°λ‚˜ νŠΉμ • μˆœμ„œμ— 따라 κ²°κ³Όλ₯Ό ν•„ν„°λ§ν•˜κ³  μˆœμœ„λ₯Ό λ§€κΈ°λŠ”λ° μœ μš©ν•©λ‹ˆλ‹€. λ‹€λ₯Έ μœˆλ„μš° ν•¨μˆ˜λ‘œλŠ” RANK(), DENSE_RANK(), NTILE() 등이 μžˆμŠ΅λ‹ˆλ‹€. 

https://doorbw.tistory.com/221


RANK()

 

동점이면 λ™λ“±ν•œ μˆœμœ„λ₯Ό λΆ€μ—¬ν•œλ‹€.

 

https://doorbw.tistory.com/221

 


Dense_RANK()

μ μˆ˜κ°€ 동일할 경우 μˆœμœ„λŠ” λ˜‘κ°™μ§€λ§Œ λ“±μˆ˜κ°€ κ±΄λ„ˆλ›°μ§€ μ•Šκ³  μ­‰ 이어진닀.

https://doorbw.tistory.com/221