窗口函数
row_number(): 同薪不同名,相当于行号,例如3000、2000、2000、1000排名后为1、2、3、4
rank(): 同薪同名,有跳级,例如3000、2000、2000、1000排名后为1、2、2、4
dense_rank(): 同薪同名,无跳级,例如3000、2000、2000、1000排名后为1、2、2、3
ntile(): 分桶排名,即首先按桶的个数分出第一二三桶,然后各桶内从1排名,实际不是很常用
另外这三个函数必须要要与其搭档over()配套使用,over()中的参数常见的有两个,分别是
partition by,按某字段切分
order by,与常规order by用法一致,也区分ASC(默认)和DESC,因为排名总得有个依据
注意:在使用over等开窗函数时,over里头的分组及排序的执行晚于“where,group by,order by”的执行
SELECT DISTINCT
salary
FROM
( SELECT salary, dense_rank() over ( ORDER BY salary DESC ) AS rnk FROM employee ) tmp
WHERE
rnk = N
评论区