【问题标题】:SQL WHERE AND error messageSQL WHERE AND 错误消息
【发布时间】:2017-02-10 00:57:35
【问题描述】:
SELECT *
FROM dbo.staff
WHERE st_position = 'Supervisor' AND st_salary < AVG(st_salary);
所以我试图设置一个查询,输出工资低于平均水平的所有主管的列表。
把它放进去我得到以下错误。
消息 147,级别 15,状态 1,行 1
聚合可能不会出现在 WHERE 子句中,除非它位于 HAVING 子句或选择列表中包含的子查询中,并且被聚合的列是外部引用。
【问题讨论】:
标签:
sql
where
postgresqlstudio
【解决方案1】:
要获取平均工资的值,我们可以使用以下查询:
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)
【解决方案2】:
我会使用窗口函数来做到这一点:
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;