首页 > 解决方案 > 使用 WHERE 子句代替聚合函数的逻辑

问题描述

我正在计算一张大表上值的频率。由于聚合函数的结果导致某些行为零,我想简单地跳过这些行。我本可以使用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

标签: sqlpostgresqlaggregate-functions

解决方案


使用聚合函数,您不能使用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

推荐阅读