SQL语句之DENSE_RANK函数:
DENSE_RANK()
是一个窗口函数,它为分区或结果集中的每一行分配排名,而排名值没有间隙。
DENSE_RANK()。如果使用 DENSE_RANK() 进行排名会得到:1,1,2,3,4。
RANK()。如果使用 RANK() 进行排名会得到:1,1,3,4,5。
ROW_NUMBER()。如果使用 ROW_NUMBER() 进行排名会得到:1,2,3,4,5。
实战:leetCode 185题,
部门工资前三高所有员工,包含部门中工资相同的员工,
select B.name AS Department
,A.Employee
,A.Salary
from (
select DepartmentId
,name as employee
,salary
,dense_rank() over (partition by departmentid order by salary desc) as rk
from employee
) A
left join department B on A.departmentid = B.id
where A.rk <= 3
其中,
PARTITION BY
子句将FROM
子句生成的结果集划分为分区。
ORDER BY
子句指定DENSE_RANK()
函数操作的每个分区中的行顺序。
DESC 是降序排列,ASC 是升序排列。
DENSE_RANK()
函数应用于每个分区。
LEFT JOIN 是左连接查询,从左表A那里返回所有的行,即使在右表B中没有匹配的行。