求助:创建视图存储薪资最高的前2名员工信息(附SQL代码)
创建存储薪资最高前2名人员信息的视图
基础实现(取前2条,不处理并列)
如果只需要单纯取薪资排序后的前2条记录,可以用以下SQL创建视图:
CREATE VIEW Top2HighestPaidStaff AS SELECT TOP 2 s.StaffCode, s.StaffName, s.Birth, s.Gender, r.RoomName, b.Paid AS Salary FROM STAFF s JOIN BONUS b ON s.StaffCode = b.StaffCode JOIN ROOM r ON b.RoomCode = r.RoomCode ORDER BY b.Paid DESC;
代码说明:
- 通过
JOIN关联员工表(STAFF)、奖金表(BONUS)和部门表(ROOM),获取员工的基本信息、薪资及所属部门 ORDER BY b.Paid DESC按薪资从高到低排序TOP 2指定取排序后的前2条记录- 创建完成后,执行
SELECT * FROM Top2HighestPaidStaff即可查看结果
处理薪资并列的情况
如果存在多名员工薪资并列第2的情况,想要把这些员工都包含进来,可以用排名函数DENSE_RANK()实现:
CREATE VIEW Top2HighestPaidStaffWithTies AS SELECT StaffCode, StaffName, Birth, Gender, RoomName, Salary FROM ( SELECT s.StaffCode, s.StaffName, s.Birth, s.Gender, r.RoomName, b.Paid AS Salary, -- 按薪资降序排名,相同薪资排名相同 DENSE_RANK() OVER(ORDER BY b.Paid DESC) AS SalaryRank FROM STAFF s JOIN BONUS b ON s.StaffCode = b.StaffCode JOIN ROOM r ON b.RoomCode = r.RoomCode ) RankedStaff WHERE SalaryRank <= 2;
代码说明:
- 内层查询用
DENSE_RANK()给每个员工的薪资排名,相同薪资的员工会得到相同的排名 - 外层查询筛选出排名≤2的记录,这样所有薪资排名前2的员工(包括并列)都会被包含
内容的提问来源于stack exchange,提问作者Vanh Anwir
相关产品推荐
相关产品推荐

