我使用两张桌子
员工(empid integer,mgrid integer,deptid integer,salary integer) 部门(deptid integer,deptname text)
我需要在每个部门找到前3名员工(基于薪水)。结果应该有deptname,empid,工资按deptname排序,然后是高薪低薪的员工。
我感谢你的帮助!!
答案 0 :(得分:0)
此查询分为两部分。内部和外部查询。
第一部分,我在deptid级别进行分区,并按降序为工资分配等级,以解决您的问题。 第二部分只是对所有输出字段进行选择,只过滤掉每个部门中的前三名员工。
关键点: - 使用内部查询中的ROW_NUMBER窗口函数为每个部门的工资分配等级解决了整个问题。
SELECT deptname,empid,salary
FROM
(
SELECT d.deptname,
e.empid,
e.salary,
ROW_NUMBER() OVER ( PARTITION BY e.deptid ORDER BY
e.salary DESC ) AS rank_salary_by_dept
FROM dept d, employee e
WHERE d.deptid = e.deptid
)
WHERE rank_salary_by_dept <= 3
ORDER BY deptname,rank_salary_by_dept;