Influxdb XDB查询基本百分比计算
我想计算一个除法,在一个特定的表中,不同于零的值的数量和在同一个表中等于零的值的数量之间Influxdb XDB查询基本百分比计算,influxdb,Influxdb,我想计算一个除法,在一个特定的表中,不同于零的值的数量和在同一个表中等于零的值的数量之间 SELECT (count("value") WHERE value = 0 / count("value") WHERE value != 0) * 100 FROM "ping_rtt" WHERE time < now() - 15 从“ping_rtt”中选择(count(“value”)其中value=0/count(“value”)其中value!=0)*100,其中time
SELECT (count("value") WHERE value = 0 / count("value") WHERE value != 0) * 100 FROM "ping_rtt" WHERE time < now() - 15
从“ping_rtt”中选择(count(“value”)其中value=0/count(“value”)其中value!=0)*100,其中time
显然,这是错误的,我想知道如何正确地构造查询。如果您的字段
值
只包含0或1;您可以轻松计算百分比,如下所示:
SELECT 100*sum(value)/count(value) from your_metric
或者简单地使用Mean
函数而不是count/sum
但是如果值
由任意数字组成;有一种棘手的方法(基于当前XDB实现将零/零计算为零的事实)可以实现这一点:)您可以首先将字段值
映射为零和一,然后计算百分比:
SELECT 100*count(map_value)/sum(map_value) FROM (SELECT value/value as map_value FROM your_metric)
它在我的XDB1.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
如果您的字段
值
仅由0或1组成;您可以轻松计算百分比,如下所示:
SELECT 100*sum(value)/count(value) from your_metric
或者简单地使用Mean
函数而不是count/sum
但是如果值
由任意数字组成;有一种棘手的方法(基于当前XDB实现将零/零计算为零的事实)可以实现这一点:)您可以首先将字段值
映射为零和一,然后计算百分比:
SELECT 100*count(map_value)/sum(map_value) FROM (SELECT value/value as map_value FROM your_metric)
它在我的XDB1.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
谢谢你的回答。确实有用。我试试:)+1。如果您有0和1,那么您可以直接计算100*平均值(map_值)-您将保存一个函数和子查询。从数学角度看:value/value-可以有一个未定义的零除。InfluxDB的当前实现将零除零计算为零,而不是NaN。基于这一事实,我们给出了上述答案(作为一个棘手的答案!)@Jangaraj感谢您的回答。确实有用。我试试:)+1。如果您有0和1,那么您可以直接计算100*平均值(map_值)-您将保存一个函数和子查询。从数学角度看:value/value-可以有一个未定义的零除。InfluxDB的当前实现将零除零计算为零,而不是NaN。基于这一事实,给出了上述答案(作为一个棘手的答案!)@JanGaraj