【问题标题】: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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多