You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询平均内存使用率时HAVING与WHERE混用报错如何解决?

SQL查询内存使用率平均值的正确写法

核心规则说明

WHERE和HAVING的执行顺序和适用场景有明确区别:

  • WHERE 执行于聚合计算之前,用于过滤原始数据行,仅支持对表中原生字段设置筛选条件,不支持聚合函数结果、SELECT语句中定义的别名作为筛选条件
  • HAVING 执行于聚合计算之后,用于过滤聚合后的结果集,仅支持对聚合计算结果、分组字段设置筛选条件

报错原因说明

  • 第一次报错:将@timestamp这类原生字段的过滤条件放到了HAVING中,不符合HAVING的使用规则
  • 第二次报错:将AVG(system.memory.actual.used.pct)这类聚合函数结果的过滤条件放到了WHERE中,不符合WHERE的使用规则

正确查询语句

将原生字段过滤条件放在WHERE中,聚合结果过滤条件放在HAVING中即可:

SELECT AVG(system.memory.actual.used.pct) AS averageMemory 
FROM "metricbeat*" 
WHERE host.name.keyword='data.storage' 
AND "@timestamp" BETWEEN '2021-10-01T00:00:00.000Z' AND '2021-10-15T00:00:00.000Z'
HAVING AVG(system.memory.actual.used.pct) > 0.3

如果你的SQL查询引擎支持HAVING子句引用SELECT中定义的别名,也可以将HAVING条件简化为HAVING averageMemory > 0.3。

内容的提问来源于stack exchange,提问作者Marcos Vasquez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 16:36:01