繁体   English   中英

具有从句与mysql中的where一起使用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM