MySQL中的分组查询通常使用GROUP BY
语句来实现,它可以将查询结果按照一个或多个列进行分组,并对每个分组应用聚合函数,如SUM()
, AVG()
, MAX()
, MIN()
等。当需要获取每个分组中某列的最大值时,可以使用MAX()
函数。
HAVING
子句来过滤分组后的结果。假设我们有一个名为employees
的表,结构如下:
| id | name | department | salary | |----|------|------------|--------| | 1 | Tom | HR | 5000 | | 2 | Jerry| IT | 6000 | | 3 | Bob | HR | 5500 | | 4 | Alice| IT | 6500 |
我们想要获取每个部门工资最高的员工ID。
SELECT department, MAX(id) as max_id
FROM employees
GROUP BY department;
这个查询将返回每个部门的最高工资员工的ID。
问题:如果一个部门有多个员工工资相同且为该部门最高,上述查询只会返回其中一个员工的ID。
原因:MAX()
函数在分组中只返回一个最大值,如果有多个相同的最大值,它会随机返回其中一个。
为了获取所有工资最高的员工ID,可以使用子查询:
SELECT e1.id, e1.department
FROM employees e1
JOIN (
SELECT department, MAX(salary) as max_salary
FROM employees
GROUP BY department
) e2 ON e1.department = e2.department AND e1.salary = e2.max_salary;
这个查询首先找出每个部门的最高工资,然后通过连接原始表来获取所有工资等于该最高工资的员工ID。
请注意,以上链接为示例,实际使用时请以最新的官方文档为准。
领取专属 10元无门槛券
手把手带您无忧上云