Sql Group by子句以获取最高薪酬员工的姓名

Sql Group by子句以获取最高薪酬员工的姓名,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个表中的员工,字段为部门、员工和工资。我想要一个查询,列出部门最高工资和该工资的员工姓名 我知道这很简单。我在谷歌上搜索了一下,但找到了这样的答案,上面只列出了部门和薪水 SELECT dept, SUM (salary) FROM employee GROUP BY dept; SQL Server 2008支持窗口函数,可帮助您获得所需内容 WITH recordList AS ( SELECT dept, employeeName, salary,

我有一个表中的员工,字段为部门、员工和工资。我想要一个查询,列出部门最高工资和该工资的员工姓名

我知道这很简单。我在谷歌上搜索了一下,但找到了这样的答案,上面只列出了部门和薪水

SELECT dept, SUM (salary)
FROM employee
GROUP BY dept; 

SQL Server 2008支持
窗口函数
,可帮助您获得所需内容

WITH recordList
AS
(
    SELECT  dept, employeeName, salary,
            DENSE_RANK() OVER (PARTITION BY dept ORDER BY salary DESC) rn
    FROM    employee
)
SELECT dept, employeeName, salary
FROM   recordList
WHERE  rn = 1
    • 这样就可以了

      SELECT E1.DEPT, E2.ENAME, E1.HIGHEST_SALARY
      FROM
      (SELECT DEPT, MAX(SALARY) HIGHEST_SALARY
      FROM EMPLOYEE
      GROUP BY DEPT) E1
      INNER JOIN EMPLOYEE E2 ON E1.HIGHEST_SALARY = E2.SALARY
      AND E1.DEPT = E2.DEPT
      

      你在用什么
      RDBMS
      代表关系数据库管理系统
      RDBMS是SQL
      以及所有现代数据库系统(如MS SQL Server、IBM DB2、Oracle、MySQL等)的基础。
      ORDER BY
      LIMIT
      。并不是你需要的每一段代码都能来自谷歌。有时候你需要自己思考。有时你需要学习。如果两名员工的工资相同(最高)@slacker,则返回重复行,因为我在查询中使用了
      densite\u RANK()
      ,它认为这是有意义的,因为两名员工的工资相同,而这两名员工的工资又是部门中最高的,如果你只想得到一个,你需要使用
      ROW_NUMBER()
      ex@slacker:嗯,应该是这样的,因为可能有两名员工的工资最高。J W的答案在逻辑意义上是正确的。或者,你可以使用
      STUFF
      将每个部门的名称以逗号分隔并显示在一行中。我发现了这个错误,如何纠正它?没有为“e2”的第2列指定列名。您正在使用哪个数据库?MSSQL,Postgres,MySQL。。。?
      SELECT e1.*
      FROM employee e1
      JOIN (SELECT dept, MAX(salary) FROM employee GROUP BY dept) e2 ON
          e1.dept = e2.dept AND e1.salary = e2.salary
      
      SELECT E1.DEPT, E2.ENAME, E1.HIGHEST_SALARY
      FROM
      (SELECT DEPT, MAX(SALARY) HIGHEST_SALARY
      FROM EMPLOYEE
      GROUP BY DEPT) E1
      INNER JOIN EMPLOYEE E2 ON E1.HIGHEST_SALARY = E2.SALARY
      AND E1.DEPT = E2.DEPT
      
      select * from (select salary,last_name,dense_rank()
      over (order by salary desc)
      sal_rank from employees) where sal_rank <=3;
      
      SALARY LAST_NAME                   SAL_RANK
      ---------- ------------------------- ----------
       24000 King                               1
       17000 Kochhar                            2
       17000 De Haan                            2
       14000 Russell                            3