事件的起因是我看到了别人的解,这几个函数不常用,但是可以来复习一下
这个题目一看,首先想到的就是求每个部门的工资最大值的人,额外条件为,并列最大值的人也要列出来,那么这里可以考虑的是DENSE_RANK()以及RANK(),但是ROW_NUMBER()就不符合额外条件了
我的解
SELECT depname AS Department,name AS Employee,salary AS Salary FROM (
SELECT DENSE_RANK() OVER(PARTITION BY a.departmentId ORDER BY a.salary desc ) num,b.name as depname,a.name,a.salary FROM Employee a LEFT JOIN
Department b ON a.departmentId=b.ID ) AS s WHERE num=1
看了下最优解,用的也是DENSE_RANK(),其他的大差不差
意外发现
select
d.Name as Department,
e.Name as Employee,
Salary
from
Employee e,
Department d
where
e.DepartmentId = d.Id
and
e.Salary >= ALL(
select Salary from Employee
where DepartmentId=e.DepartmentId
)
做这个题的时候想过去求最大值然后再大于这个值,但是担心性能不高,就没有用这种,结果它的性能居然比我的还高些,真嘟汗颜,当然all,也可以替换为max值之后再>,但是不知道all的性能会不会比max高一些