sql - 使用 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
解决方案
使用聚合函数,您不能使用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
推荐阅读
- javascript - 每当时间改变时都必须触发 SetInterval?
- javascript - 如何使用正确的缩进打印error.stack,没有换行符
- c# - 从文本文件中读取 ip:port 并在我的字符串中使用它并将 ip 与端口区分为代码中的“:”的最佳方法
- javascript - FlowJS内联咖喱函数类型与Union
- javascript - 如何知道请求文件已完成?
- c# - Imagemagick:优化截断图像的识别速度
- ios - 每秒重新加载 Tableview 部分会导致闪烁
- android - Pixel 2 XL 无法连接到 PC 进行 Android Studio 调试
- c# - 如何将文件从 MemoryStream 上传到 FTP 服务器
- oracle - 当我尝试将值插入表时,触发器不起作用