Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Influxdb XDB查询基本百分比计算_Influxdb - Fatal编程技术网

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