Sql 需要找到前三名员工

Sql 需要找到前三名员工,sql,Sql,我用两张桌子工作 员工empid整数、经理ID整数、部门ID整数、薪资整数 Dept deptid整数,deptname文本 我需要在每个部门找到工资最高的三名员工。结果应该有部门名称、empid、按部门名称排序的薪资,然后是从高薪到低薪的员工 我感谢你的帮助 此查询包含两个部分。内部和外部查询 第一部分,我在deptid级别进行分区,并按降序为工资分配等级,这解决了您的问题。 第二部分只是对所有输出字段进行选择,只筛选出每个部门中排名前三的员工 关键点:-在内部查询中使用行数窗口函数为每个部门

我用两张桌子工作

员工empid整数、经理ID整数、部门ID整数、薪资整数 Dept deptid整数,deptname文本

我需要在每个部门找到工资最高的三名员工。结果应该有部门名称、empid、按部门名称排序的薪资,然后是从高薪到低薪的员工


我感谢你的帮助

此查询包含两个部分。内部和外部查询

第一部分,我在deptid级别进行分区,并按降序为工资分配等级,这解决了您的问题。 第二部分只是对所有输出字段进行选择,只筛选出每个部门中排名前三的员工

关键点:-在内部查询中使用行数窗口函数为每个部门的工资分配等级解决了整个问题

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;

您删除了哪些不兼容的数据库标记。一个正确的数据库标签,以及样本数据和期望的结果有助于回答一个问题。谢谢SOaddict。您是否可以解释引号中的脚本在做什么?按e.deptid进行分区,按e.salary DESC进行排序。我得到了订单,但指的是:和分区。我回答了你的问题,并提供了更多细节。如果你还有任何问题,请告诉我。是的,我还有一个问题。我如何列出所有员工、他们的工资以及他们所在部门收入最高但低于该员工的员工的工资,形成相同的两个表格。谢谢。绿色记号上方有一个向上箭头