首页 > 解决方案 > influxdb查询基本百分比计算

问题描述

我想计算特定表中与零不同的多个值与同一个表中等于零的值的数量之间的除法

SELECT (count("value") WHERE value = 0 / count("value") WHERE value != 0) * 100 FROM "ping_rtt" WHERE time < now() - 15

显然这是错误的,我想知道构建查询的正确方法是什么。

标签: influxdb

解决方案


如果您的字段value仅包含零或一;您可以轻松地将百分比计算为:

SELECT 100*sum(value)/count(value) from your_metric

或者干脆使用Meanfunction 而不是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

推荐阅读