分组查询最大值中的最小值的几种方法
举例:查询各部门最高工资中的最低的部门
这道题问的有些绕口,分解开来就是查找出各个部门的最高工资,然后查找出最高工资中最低的是哪一个部门
这就涉及到了子查询,有几种实现方式
方式1:
可以查找出各个部门的最高工资,然后正序排序,取第一个
#方式1
SELECT MAX(salary)
FROM employees
GROUP BY department_id
ORDER BY MAX(salary)
LIMIT 1;
方式2:
可以先求出各个部门的最高工资,然后在求出最小的那个数值
#方式2
SELECT MIN(max_sal)
FROM (
SELECT MAX(salary) max_sal
FROM employees
GROUP BY department_id
) t
方式3:
求出各个部门的最高工资,根据结果求得小于或者等于该结果集中的任意个结果
#方式3
SELECT department_id, MAX(salary)
FROM employees
GROUP BY department_id
HAVING MAX(salary)<=ALL( -- 小于结果的所有数值,ANY为任意一个
SELECT MAX(salary) max_sal
FROM employees
GROUP BY department_id
)