下麵介紹三種用於進行排序的專用視窗函數: 1、RANK() 在計算排序時,若存在相同位次,會跳過之後的位次。 例如,有3條排在第1位時,排序為:1,1,1,4······ 2、DENSE_RANK() 這就是題目中所用到的函數,在計算排序時,若存在相同位次,不會跳過之後的位次。 例如,有3條排在第1 ...
下麵介紹三種用於進行排序的專用視窗函數:
1、RANK()
在計算排序時,若存在相同位次,會跳過之後的位次。
例如,有3條排在第1位時,排序為:1,1,1,4······
2、DENSE_RANK()
這就是題目中所用到的函數,在計算排序時,若存在相同位次,不會跳過之後的位次。
例如,有3條排在第1位時,排序為:1,1,1,2······
3、ROW_NUMBER()
這個函數賦予唯一的連續位次。
例如,有3條排在第1位時,排序為:1,2,3,4······
視窗函數用法:
<視窗函數> OVER ( [PARTITION BY <列清單> ]
ORDER BY <排序用列清單> )
*其中[ ]中的內容可以忽略
例如:題目源自牛客網
代碼:
select emp_no, salary, dense_rank() over (order by salary desc) as t_rank from salaries where to_date='9999-01-01' order by t_rank asc,emp_no asc;