需要找到前3名员工

时间:2016-09-30 23:22:11

标签: sql

我使用两张桌子

员工(empid integer,mgrid integer,deptid integer,salary integer) 部门(deptid integer,deptname text)

我需要在每个部门找到前3名员工(基于薪水)。结果应该有deptname,empid,工资按deptname排序,然后是高薪低薪的员工。

我感谢你的帮助!!

1 个答案:

答案 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;