【问题标题】:Logic to use in place of Aggregate function the WHERE clause使用 WHERE 子句代替聚合函数的逻辑
【发布时间】:2020-07-02 19:28:08
【问题描述】:

我正在计算一个大表中值的频率。由于聚合函数的结果导致某些行为零,我想简单地跳过这些行。我本可以使用NULLIF(..),但我不想返回零值。 WHERE 子句中不允许使用聚合函数。如何重构我的查询以跳过这些行?

SELECT device_id,
       COUNT(*) / (MAX(signal_strength) - MIN(signal_strength)) as freq
FROMm dcu
WHERE MAX(signal_strength) - MIN(signal_strength) !=0
GROUP BY device_id

ERROR: aggregate functions are not allowed in WHERE
LINE 4: where max(signal_strength) - min(signal_strength) !=0

【问题讨论】:

    标签: sql postgresql aggregate-functions


    【解决方案1】:

    您必须使用HAVING 而不是WHERE 进行聚合计算。例如:

    SELECT device_id,
           COUNT(*) / (MAX(signal_strength) - MIN(signal_strength)) as freq
    FROMm dcu
    GROUP BY device_id
    HAVING MAX(signal_strength) <> MIN(signal_strength)
    

    【讨论】:

      【解决方案2】:

      使用聚合函数,你不能使用where clause - 你需要使用having clause

      SELECT device_id,
             COUNT(*) / (MAX(signal_strength) - MIN(signal_strength)) as freq
      FROMm dcu
      GROUP BY device_id
      having MAX(signal_strength) - MIN(signal_strength) !=0
      

      【讨论】:

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