【发布时间】: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+,您甚至可以使用其他选项。