有很多会计师,他们每个人都有工作(按小时支付),我需要获得平均工作成本高于工作总成本的每个会计师的会计师名称。我该怎么做?
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的视图中。上面的代码没有任何帮助修改将不胜感激。提前谢谢。
答案 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 >
处遇到的错误是因为别名Average
在WHERE
子句中不可见,并且通常要求您将整个内容放在与您在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);