influxdb查询基本百分比计算

时间:2018-10-16 16:07:57

标签: influxdb

我想计算特定表中多个不同形式为零的值与同一表中等于零的值之分

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

显然这是错误的,我想知道怎样构造查询的正确方法。

1 个答案:

答案 0 :(得分:1)

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

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

或者直接使用Mean函数代替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