这是架构 员工(姓名,性别,工资,deptName) 和名称是主键
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,只有一列没有别的,我想知道如何(平均(薪水))工作,它是从表中采取所有员工的平均或什么?
任何能告诉我的人 感谢
答案 0 :(得分:1)
因此,您的查询会过滤那些部门男性工人的平均工资大于整体(公司)平均工资的部门列表。WHERE
过滤 之前的记录而HAVING
会在之后过滤结果。使用函数或运算符的表达式可以在任一子句中使用(尽管像AVG()
这样的聚合函数不能在WHERE
子句中使用,因为在评估该子句时记录不会被分组。 / p>
答案 1 :(得分:1)
SELECT AVG(salary)
FROM employee
首先通过上述查询,您将获得所有员工的平均工资。
现在你只得到平均工资大于所有员工平均工资的部门。
答案 2 :(得分:0)
having子句的作用类似于' group by deptName '子句的where条件。所有行都按deptName列的值分组。对于每个组,平均值是根据该特定组的薪水值计算的。
因此,对于所有组,只有当该特定“deptName”组的平均工资大于所有员工的平均工资时,才会显示该组中的行。
答案 3 :(得分:0)
具有类似WHERE子句但其聚合函数类似于AVG。
所以你的查询会查找每个deptname的平均值。但在您的查询中
having avg(salary) > (select avg(salary) from employee)
你可能想要给出平均值来与之比较。
像
having avg(salary) > 25
因此,这将只选择那些平均值为> 25。