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;
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;