美文网首页
SQL 查找前三名(包括中国式排名)

SQL 查找前三名(包括中国式排名)

作者: 张倩_fac0 | 来源:发表于2019-08-28 16:37 被阅读0次

思路1:找出每个部门获得前三高工资的所有员工,将这个表左连接自己,条件为部门编号相同且工资1比工资2低。这样如果结果中某人的Id号出现次数大于2,那么说明他排不进前三名(0次第一名,没有人比他高,1次第二名,有一个人比他高,2次第三名,有两个人比他高)。

   select e1.Id

    from Employee as e1 left join Employee as e2

    on e1.DepartmentId = e2.DepartmentId and e1.Salary < e2.Salary

    group by e1.Id

    having count(e1.Id)<=2

但是这个排名是根据人数排名的,即如果有三人并列第一名那么绝对成绩第二名的人并不会被提取出来。

思路2:按照绝对工资值排,假设有三人并列第一,两人并列第二,三人并列第三那么这8个人都会被提取出来。

    select e1.Id

    from Employee as e1 left join Employee as e2

    on e1.DepartmentId = e2.DepartmentId and e1.Salary < e2.Salary

    group by e1.Id

    having count(distinct e1.Salary)<=2

相关文章

网友评论

      本文标题:SQL 查找前三名(包括中国式排名)

      本文链接:https://www.haomeiwen.com/subject/rmfqeqtx.html