Influxdb:如何通过查询获取组中结果的数量

Vin*_*raj 3 influxdb

无论如何,我可以通过查询结果获取组中结果/点/记录的总数吗?

> SELECT COUNT("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z' GROUP BY time(12m)

name: h2o_feet
--------------
time                   count
2015-08-18T00:00:00Z   2
2015-08-18T00:12:00Z   2
2015-08-18T00:24:00Z   2
Run Code Online (Sandbox Code Playgroud)

我预计在这种情况下计数为 3。尽管我可以使用这里的时间段和间隔(12m)来计算结果数量,但我想知道是否可以通过查询数据库来做到这一点。

shi*_*amy 5

您可以在单个查询中使用多个聚合。使用您的示例添加select count(*) from (<inner query>)

> SELECT COUNT(*) FROM (SELECT COUNT("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z' GROUP BY time(12m))

name: h2o_feet
--------------
time                   count_count
1970-01-01T00:00:00Z   3
Run Code Online (Sandbox Code Playgroud)

但是,如果您遇到分组依据返回空行的情况,则它们将不被计算在内。

例如,对下表进行计数将得到 2 而不是 3:

name: h2o_feet
--------------
time                   count
2015-08-18T00:00:00Z   2
2015-08-18T00:12:00Z   
2015-08-18T00:24:00Z   2
Run Code Online (Sandbox Code Playgroud)

要在计数中包含空行,您需要fill(1)像这样添加到查询中:

> SELECT COUNT(*) FROM (SELECT COUNT("water_level") FROM "h2o_feet" WHERE "location"='coyote_creek' AND time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z' GROUP BY time(12m) fill(1))
Run Code Online (Sandbox Code Playgroud)