[英]having clause works with where in mysql
这是架构Employee(名称,性别,工资,部门名称),名称是主键
SELECT deptname
FROM employee
WHERE sex=m
GROUP BY deptName HAVING avg(salary) >
(SELECT avg(salary)
FROM employee)
我想了解having avg(salary)
部分实际上是做什么的? 由于我们不包括薪金选择条款,
SELECT deptname
FROM employee
WHERE sex=m
GROUP BY deptName
这部分将给我deptName组,仅剩一列,我想知道(avg(salary))是如何工作的,它从表中获取所有员工的平均值还是什么?
谁能告诉我谢谢
在对记录进行分组之前会在WHERE
过滤; 而“ HAVING
”会在对结果进行分组后对其进行过滤。 使用函数或运算符的表达式可以在任何一个子句中使用(尽管像AVG()
这样的聚合函数不能在WHERE
子句中使用,因为在对该子句求值时不会对记录进行分组)。
因此,您的查询将为那些部门的男性工人的平均工资大于总体(公司)平均工资的部门过滤一个部门列表。
SELECT AVG(salary)
FROM employee
通过上面的查询,您首先将获得所有员工的平均工资。
现在,您只有一个部门的平均薪水高于所有员工的平均薪水。
hading子句的工作方式类似于' group by deptName '子句的where条件。 所有行均按deptName列的值分组。 对于每个组,均根据该特定组的薪水值计算平均值。
因此,对于所有组,仅当特定“ deptName”组的平均薪水高于所有员工的平均薪水时,该行才会显示。
具有类似于WHERE子句,但具有诸如AVG之类的聚合函数。
因此您的查询将查找每个部门名称的平均值。 但是您的查询
having avg(salary) > (select avg(salary) from employee)
您可能想给一个平均值进行比较。
喜欢
having avg(salary) > 25
因此,这只会选择平均得分> 25的用户。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.