influxdb - influxdb查询基本百分比计算
问题描述
我想计算特定表中与零不同的多个值与同一个表中等于零的值的数量之间的除法
SELECT (count("value") WHERE value = 0 / count("value") WHERE value != 0) * 100 FROM "ping_rtt" WHERE time < now() - 15
显然这是错误的,我想知道构建查询的正确方法是什么。
解决方案
如果您的字段value
仅包含零或一;您可以轻松地将百分比计算为:
SELECT 100*sum(value)/count(value) from your_metric
或者干脆使用Mean
function 而不是count/sum
.
但如果value
由任意数字组成;有一种棘手的方法(基于当前 InfluxDB 实现将零/零计算为零的事实)来实现这一点:) 您可以首先将您的字段映射value
到零和一,然后计算百分比:
SELECT 100*count(map_value)/sum(map_value) FROM (SELECT value/value as map_value FROM your_metric)
它在我的 influxdb 1.6.0 中正常工作;假设有一个名为的度量metric
,其中包含一个字段val
:
> select * from metric
name: metric
time tag val
---- --- ---
1539780859073434500 15
1539780862064944400 10
1539780865272757400 7
1539780867449546100 0
1539780880145442700 -8
1539781131768616600 12 0
1539781644977103800 12 0.5
1539781649113051900 12 1.5
如您所见,有不同的浮点数,如 0、-8、1.5、0.5 等。我们现在可以将我们的val
字段映射到零或一:
> select val/val as normal_val from metric
name: metric
time normal_val
---- ----------
1539780859073434500 1
1539780862064944400 1
1539780865272757400 1
1539780867449546100 0
1539780880145442700 1
1539781131768616600 0
1539781644977103800 1
1539781649113051900 1
推荐阅读
- sql - 如何从 PostgreSQL 1:n 表中生成 JSON 文档?
- php - 我的 xamppp - Visual Studio 代码设置有什么问题?
- python - 如何使用scrapy获取嵌套文本值
- c# - 如何在没有 Visual Studio 的情况下引用程序集(* .dll)?
- kotlin - 为什么 JvmStatic 方法可以访问和修改状态?
- javascript - 使用 ajax 表单返回 false 不起作用
- mysql - 来自反应应用程序的 post 方法的未定义值
- python - Django - sqlite - 从模型中删除属性
- c# - 如何读取json数组?
- javascript - 我无法在 JS 中发布数据