SQL WHERE AND错误消息

时间:2017-02-10 00:57:35

标签: sql where postgresqlstudio

SELECT *
FROM dbo.staff
WHERE st_position = 'Supervisor' AND st_salary < AVG(st_salary);

所以我试图设置一个查询,输出薪水低于平均水平的所有主管的列表。 把它放进去我得到以下错误。

Msg 147,Level 15,State 1,Line 1 聚合可能不会出现在WHERE子句中,除非它位于HAVING子句或选择列表中包含的子查询中,并且要聚合的列是外部引用。

2 个答案:

答案 0 :(得分:3)

要获得平均工资的价值,我们可以使用以下查询:

SELECT AVG(st_salary) FROM dbo.staff

将它与其他条件组合在一起,将提供以下查询:

SELECT  *
FROM    dbo.staff
WHERE   st_position = 'Supervisor'
AND     st_salary < (SELECT AVG(st_salary) FROM dbo.staff)

答案 1 :(得分:0)

我会使用窗口函数来执行此操作:

SELECT s.*
FROM (SELECT s.*, AVG(st_salary) OVER () as avg_st_slary
      FROM dbo.staff s
      WHERE s.st_position = 'Supervisor'
     ) s 
WHERE st_salary < avg_st_salary;