如何找到每个部门工资最高的员工? [复制]

Posted

技术标签:

【中文标题】如何找到每个部门工资最高的员工? [复制]【英文标题】:How to find the Employee who earns maximum salary in each department? [duplicate] 【发布时间】:2019-06-23 19:33:14 【问题描述】:
CREATE TABLE employees(id int AUTO_INCREMENT PRIMARY KEY, emp_name VARCHAR(10), dept VARCHAR(10), salary DECIMAL(8,2));

INSERT INTO employees (dept,emp_name,salary) VALUES('Engg','Sam',1000);
INSERT INTO employees (dept,emp_name,salary) VALUES('Engg','Smith',2000);
INSERT INTO employees (dept,emp_name,salary) VALUES('HR','Denis',1500);
INSERT INTO employees (dept,emp_name,salary) VALUES('HR','Danny',3000);
INSERT INTO employees (dept,emp_name,salary) VALUES('IT','David',2000);
INSERT INTO employees (dept,emp_name,salary) VALUES('IT','John',3000);
INSERT INTO employees (dept,emp_name,salary) VALUES('Sales','Ravi',4000);
INSERT INTO employees (dept,emp_name,salary) VALUES('Sales','Bob',6000);
INSERT INTO employees (dept,emp_name,salary) VALUES('HR','Rick',4500);
INSERT INTO employees (dept,emp_name,salary) VALUES('IT','Mathew',2500);

表格:员工

+----+----------+-------+---------+
| id | emp_name | dept  | salary  |
+----+----------+-------+---------+
|  1 | Sam      | Engg  | 1000.00 |
|  2 | Smith    | Engg  | 2000.00 |
|  3 | Denis    | HR    | 1500.00 |
|  4 | Danny    | HR    | 3000.00 |
|  5 | David    | IT    | 2000.00 |
|  6 | John     | IT    | 3000.00 |
|  7 | Ravi     | Sales | 4000.00 |
|  8 | Bob      | Sales | 6000.00 |
|  9 | Rick     | HR    | 4500.00 |
| 10 | Mathew   | IT    | 2500.00 |
+----+----------+-------+---------+

问题:

找出每个部门工资最高的员工

输出:

+----+----------+-------+---------+
| id | emp_name | dept  | salary  |
+----+----------+-------+---------+
|  8 | Bob      | Sales | 6000.00 |
|  9 | Rick     | HR    | 4500.00 |
|  6 | John     | IT    | 3000.00 |
|  2 | Smith    | Engg  | 2000.00 |
+----+----------+-------+---------+

当我尝试时,我遇到了很多错误。 为什么会出现错误?

SELECT id, emp_name, salary, dept 
FROM employees 
GROUP BY dept;

预期结果:

+----+----------+-------+---------+
| id | emp_name | dept  | salary  |
+----+----------+-------+---------+
|  8 | Bob      | Sales | 6000.00 |
|  9 | Rick     | HR    | 4500.00 |
|  6 | John     | IT    | 3000.00 |
|  2 | Smith    | Engg  | 2000.00 |
+----+----------+-------+---------+

实际结果:

错误 1055 (42000):SELECT 列表的表达式 #1 不在 GROUP BY 子句中,并且包含在功能上不依赖于 GROUP BY 子句中的列的非聚合列“test_db.employees.ID”;这与 sql_mode=only_full_group_by 不兼容

【问题讨论】:

看起来像作业题 请在发布新问题之前对错误消息进行基本搜索。在这种情况下,搜索 非分组子句中的选择列表表达式会发现几个潜在的重复项,这可能让您自己弄清楚。 忽略前两个答案,而使用 Michael Berkowski 的第三个答案。如果您使用的是 mysql 8+,您甚至可以使用其他选项。 【参考方案1】:

您应该使用以下查询:

SELECT A.*
FROM EMPLOYEES A
JOIN (
  SELECT DEPT, MAX(SALARY) SALARY
  FROM EMPLOYEES
  GROUP BY DEPT
) B ON A.SALARY = B.SALARY AND A.DEPT = B.DEPT

【讨论】:

以上是关于如何找到每个部门工资最高的员工? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

350部门工资最高的员工

Leetcode No.184 部门工资最高的员工

力扣——部门工资最高的员工(数据库的题

2022-12-03:部门工资最高的员工。以下数据Max 和 Jim 在 IT 部门的工资都是最高的,Henry 在销售部的工资最高。sql语句如何写? 输出结果如下: department emp

找到总工资最高的部门的最佳方法 Postgresql

SQL数据库 计算出每个部门的平均工资 最高工资和最低工资 语法怎么写?