我在计算一个大表上的值的频率。由于聚合函数的结果导致某些行为零,所以我只想跳过这些行。我本来可以用的 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
2条答案
按热度按时间zzwlnbp81#
你必须使用
HAVING
而不是WHERE
用于聚合计算。例如:h79rfbju2#
对于聚合函数,不能使用
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