我使用下一個查詢來獲取使用的記憶體的平均值,但只需要在平均值大于 x 值時獲取資料
SELECT AVG(system.memory.actual.used.pct) AS averageMemory from "metricbeat*" where host.name.keyword='data.storage' HAVING AVG(system.memory.actual.used.pct)>0.3 and "@timestamp" BETWEEN '2021-10-01T00:00:00.000Z' and '2021-10-15T00:00:00.000Z'
并告訴我下一個錯誤
發現 1 個問題\n第 1:152 行:無法在非聚合 [??@timestamp] 上使用 HAVING 過濾器;改用 WHERE”
當使用 WHERE 子句時,像這樣
SELECT AVG(system.memory.actual.used.pct) AS averageMemory from "metricbeat*" where host.name.keyword='data.storage' and averageMemory>0.3 and "@timestamp" BETWEEN '2021-10-01T00:00:00.000Z' and '2021-10-15T00:00:00.000Z'
顯示下一個錯誤
發現 1 個問題\n第 1:8 行:無法對聚合函式 [AVG(system.memory.actual.used.pct)] 使用 WHERE 過濾,請改用 HAVING
我糊涂了。任何的想法?
uj5u.com熱心網友回復:
HAVING AVG(system.memory.actual.used.pct)>0.3是正確的,HAVING表示對聚合資料的約束,WHERE ... averageMemory>0.3不正確,WHERE表示記錄級別的約束。
出于同樣的原因,HAVING @timestamp BETWEEN '2021-10-01T00:00:00.000Z' and '2021-10-15T00:00:00.000Z'是錯誤的,因為@timestamp它不是聚合值而是記錄級別屬性。
所以WHERE ... and @timestamp BETWEEN '2021-10-01T00:00:00.000Z HAVING AVG(system.memory.actual.used.pct)>0.3應該是正確的方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/346152.html
上一篇:更好的SQL風格?
