如何使用子查询获取多个平均值

时间:2016-09-22 13:45:45

标签: sql-server

有很多会计师,他们每个人都有工作(按小时支付),我需要获得平均工作成本高于工作总成本的每个会计师的会计师名称。我该怎么做?

SELECT Accountant_Name, AVG(job_cost) as 'Average'
FROM job_view
WHERE Average > (SELECT AVG (job_cost) AS AV
FROM job_view)
GROUP BY Accountant_Name;

所需的一切都在名为job_view的视图中。上面的代码没有任何帮助修改将不胜感激。提前谢谢。

2 个答案:

答案 0 :(得分:1)

这应该适合你:

SELECT Accountant_Name
    , AVG(Job_Cost) as 'Average'
FROM Job_View
GROUP BY Accountant_Name
HAVING AVG(Job_Cost) > (SELECT AVG(Job_Cost) FROM Job_View)

根据您的评论,您在WHERE Average >处遇到的错误是因为别名AverageWHERE子句中不可见,并且通常要求您将整个内容放在与您在SELECT部分中定义的列一样。

但是因为在SELECT部分中Average列是一个聚合函数,所以这些只能在HAVING部分中更低,因为HAVING处理聚合条件的过滤

为什么这一切?因为查询中的语句执行顺序有规则,如explained here

答案 1 :(得分:1)

您仍然需要按Accountant_Name分组

SELECT Accountant_Name, AVG(job_cost) as 'Average'
    FROM job_view
    GROUP BY Accountant_Name
    Having AVG(job_cost) > (SELECT AVG (job_cost) FROM job_view);