sql—用where子句代替聚合函数的逻辑

btxsgosb  于 2021-07-29  发布在  Java
关注(0)|答案(2)|浏览(208)

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

zzwlnbp81#

你必须使用 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)
h79rfbju

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

相关问题