大量查询以计算成功率

时间:2018-07-27 11:00:07

标签: sql influxdb

我在influxdb中有以下数据。

time                count  http_status
----                -----  -----------
1532500250000000000 105058 200
1532500250000000000 11     499
1532500260000000000 108119 200
1532500260000000000 9      499
1532500260000000000 2      400
1532500270000000000 8      499
1532500270000000000 1      400
1532500270000000000 105321 200
1532500280000000000 1      400
1532500280000000000 106611 200
1532500280000000000 15     499
1532500290000000000 105572 200
1532500290000000000 9      499
1532500290000000000 5      400

http_status是我的api状态。

我想对此度量创建一个连续查询以生成我的api的成功率,应按以下方式计算

count(http_status == 200) / count(all apis)

我知道逻辑很简单。但是我没有编写一个influx sql来生成这个。所以我在这里写信寻求帮助。

谢谢。

1 个答案:

答案 0 :(得分:0)

一种方法是在select子句中使用相关子查询:

SELECT
    time,
    count,
    http_status,
    (SELECT SUM(CASE WHEN t2.http_status = 200 THEN 1 ELSE 0 END)
     FROM yourTable t2
     WHERE t2.time <= t1.time) /
    (SELECT COUNT(*) FROM yourTable t2 WHERE t2.time <= t1.time) AS ratio
FROM yourTable t1;

如果InfluxDB支持分析功能,那么还有另一种方法可以编写上述查询。