分组依据、分组依据中的平均值和 SQL 中的单独过滤

Group BY, Average in Group by and individual filtering in SQL

我不明白如何按部门分组并计算部门工资的平均值,然后按大于平均值的值过滤 table 的所有行SQL

那个部门的工资
Department Salary
A 100
B 200
A 200
B 50

所以A组的平均值是150 grp B 的平均值为 125 我的查询应该 return :-

Department Salary
B 200
A 200

您应该看看 SQL 中的分组是如何工作的。此查询将查找部门及其平均工资:

SELECT department, AVG(salary) salary FROM yourtable 
GROUP BY department;

为了找到薪水较高的部门,您可以将整个 table 和这个“平均结果”结合起来,只选择那些薪水较高的条目:

SELECT y.department, y.salary FROM yourtable y
JOIN (SELECT department, AVG(salary) salary FROM yourtable 
GROUP BY department) average
ON y.department = average.department
WHERE y.salary > average.salary
ORDER BY y.department;

order 子句让部门 A 出现在部门 B 之前。在您的描述中,它是按相反的方式排序的。如果你想改变这个,你可以写 ORDER BY y.department DESC; 最后一点:如果薪水 table 中有 NULL 值,平均函数将注意它们。因此,如果您有 10 个空值,其中一行的薪水为 100,另一行的薪水为 50,则平均值将为 75 并“忽略”NULL 值。如果你不想要这个,你需要用你想要的值替换 NULL 值。例如,如果您想在计算平均工资时将所有 NULL 值替换为零,则可以在查询中编写 COALESCE(salary,0)。