SQL WHERE AND 错误信息

SQL WHERE AND error message

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

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

消息 147,级别 15,状态 1,第 1 行 聚合可能不会出现在 WHERE 子句中,除非它位于包含在 HAVING 子句或 select 列表中的子查询中,并且被聚合的列是外部引用。

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

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)

我会使用 window 函数来做到这一点:

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;