使用HAVING过滤分组

如果过滤条件中使用了聚合函数,则必须使用HAVING代替WHERE,且HAVING必须声明在GROUP BY的后面。通常,HAVING不会单独使用,会和GROUP BY 一起使用。
如果过滤条件中没有聚合函数,可以使用WHEREHAVING。但推荐使用WHERE,因为WHERE的执行效率更高。

  1. 查询各部门最高工资大于10000的部门信息。
# 查询各个部门最高工资比10000高的部门信息
# 错误示例
SELECT MAX(salary),department_id
FROM employees
WHERE MAX(salary) > 10000
GROUP BY department_id; -- 报错:Invalid use of group function

# 正确示例
SELECT MAX(salary),department_id
FROM employees
GROUP BY department_id
HAVING MAX(salary) > 10000; -- 返回6行记录
/*
MAX(salary) department_id
13000.00	  20
11000.00	  30
14000.00	  80
24000.00	  90
12000.00	  100
12000.00	  110
*/
  1. 查询部门id为10,20,30,40的部门的最高工资大于10000的部门信息。
# 查询部门id为10,20,30,40的部门的最高工资大于10000的部门信息
# 方式1:推荐,因为执行效率更高
SELECT MAX(salary),department_id
FROM employees
WHERE department_id IN (10,20,30,40)
GROUP BY department_id
HAVING MAX(salary)> 10000;  -- 返回2行记录
/*
MAX(salary) department_id
13000.00	  20
11000.00	  30
*/

# 方式2
SELECT MAX(salary),department_id
FROM employees
GROUP BY department_id
HAVING MAX(salary)>10000
AND department_id IN (10,20,30,40); -- 返回2行记录

猜你喜欢

转载自blog.csdn.net/qzw752890913/article/details/126466879