返回一个(field)字段中的非空值的数量。
语法:
SELECT COUNT() FROM [WHERE ] [GROUP BY ]
示例:
>SELECT COUNT(water_level) FROM h2o_feet name: h2o_feet--------------time count1970-01-01T00:00:00Z 15258
说明 water_level这个字段在 h2o_feet表中共有15258条数据。
注意:InfluxDB中的函数如果没有指定时间的话,会默认以 epoch 0 (1970-01-01T00:00:00Z) 作为时间。
可以在where 中加入时间条件,如下:
> SELECT COUNT(water_level) FROM h2o_feet WHERE time >= '2015-08-18T00:00:00Z' AND time < '2015-09-18T17:00:00Z' GROUP BY time(4d) name: h2o_feet--------------time count2015-08-17T00:00:00Z 14402015-08-21T00:00:00Z 19202015-08-25T00:00:00Z 19202015-08-29T00:00:00Z 19202015-09-02T00:00:00Z 19152015-09-06T00:00:00Z 19202015-09-10T00:00:00Z 19202015-09-14T00:00:00Z 19202015-09-18T00:00:00Z 335
这样结果中会包含时间结果。
返回一个字段(field)的唯一值。
语法:
SELECT DISTINCT() FROM [WHERE ] [GROUP BY ]
使用示例
> SELECT DISTINCT("level description") FROM h2o_feet name: h2o_feet--------------time distinct1970-01-01T00:00:00Z between 6 and 9 feet1970-01-01T00:00:00Z below 3 feet1970-01-01T00:00:00Z between 3 and 6 feet1970-01-01T00:00:00Z at or greater than 9 feet
这个例子显示level description这个字段共有四个值,然后将其显示了出来,时间为默认时间。
返回一个字段(field)中的值的算术平均值(平均值)。字段类型必须是长整型或float64。
语法格式:
SELECT MEAN() FROM [WHERE ] [GROUP BY ]
使用示例
> SELECT MEAN(water_level) FROM h2o_feet name: h2o_feet--------------time mean1970-01-01T00:00:00Z 4.286791371454075
说明water_level字段的平均值为4.286791371454075
时间为默认时间,当然,你也可以加入where条件。
从单个字段(field)中的排序值返回中间值(中位数)。字段值的类型必须是长整型或float64格式。
语法:
SELECT MEDIAN() FROM [WHERE ] [GROUP BY ]
使用示例
> SELECT MEDIAN(water_level) from h2o_feet name: h2o_feet--------------time median1970-01-01T00:00:00Z 4.124
说明表中 water_level字段的中位数是 4.124
返回字段的最小值和最大值之间的差值。数据的类型必须是长整型或float64。
语法:
SELECT SPREAD() FROM [WHERE ] [GROUP BY ]
使用示例
> SELECT SPREAD(water_level) FROM h2o_feet name: h2o_feet--------------time spread1970-01-01T00:00:00Z 10.574
返回一个字段中的所有值的和。字段的类型必须是长整型或float64。
语法:
SELECT SUM() FROM [WHERE ] [GROUP BY ]
使用示例:
> SELECT SUM(water_level) FROM h2o_feet name: h2o_feet--------------time sum1970-01-01T00:00:00Z 67777.66900000002
作用:返回一个字段中最小的N个值。字段类型必须是长整型或float64类型。
语法:
SELECT BOTTOM([, ], )[, ] FROM [WHERE ] [GROUP BY ]
使用示例
> SELECT BOTTOM(water_level,3) FROM h2o_feet name: h2o_feet--------------time bottom2015-08-29T14:30:00Z -0.612015-08-29T14:36:00Z -0.5912015-08-30T15:18:00Z -0.594
这个例子返回表中 water_level字段中最小的三个值。
也可将关联tag放在一起查询,但如果tag值少于N的值,则返回的值的个数只会取tag中字段值少的那个。
如下所示:
> SELECT BOTTOM(water_level,location,3) FROM h2o_feet name: h2o_feet--------------time bottom location2015-08-29T10:36:00Z -0.243 santa_monica2015-08-29T14:30:00Z -0.61 coyote_creek
语句取最小的三个值,然而结果只返回了2个值,因为 location 这个tag只有 两个取值。
作用:返回一个字段中最老的取值。
语法:
SELECT FIRST()[, ] FROM [WHERE ] [GROUP BY ]
示例:
> SELECT FIRST(water_level) FROM h2o_feet WHERE location = 'santa_monica'name: h2o_feet--------------time first2015-08-18T00:00:00Z 2.064
这个语句返回了 在 location为santa_monica条件下,最旧的那个water_level字段的取值和时间。
作用:返回一个字段中最新的取值。
语法:
SELECT LAST()[, ] FROM [WHERE ] [GROUP BY ]
示例:
> SELECT LAST(water_level),location FROM h2o_feet WHERE time >= '2015-08-18T00:42:00Z' and time <= '2015-08-18T00:54:00Z'name: h2o_feet--------------time last location2015-08-18T00:54:00Z 6.982 coyote_creek
作用:返回一个字段中的最大值。该字段类型必须是长整型,float64,或布尔类型。
语法:
SELECT MAX()[, ] FROM [WHERE ] [GROUP BY ]
示例:
> SELECT MAX(water_level),location FROM h2o_feet name: h2o_feet--------------time max location2015-08-29T07:24:00Z 9.964 coyote_creek
作用:返回一个字段中的最小值。该字段类型必须是长整型,float64,或布尔类型。
语法:
SELECT MIN()[, ] FROM [WHERE ] [GROUP BY ]
示例:
> SELECT MIN(water_level),location FROM h2o_feet name: h2o_feet--------------time min location2015-08-29T14:30:00Z -0.61 coyote_creek
作用:返回排序值排位为N的百分值。字段的类型必须是长整型或float64。
百分值是介于100到0之间的整数或浮点数,包括100。
语法:
SELECT PERCENTILE(, )[, ] FROM [WHERE ] [GROUP BY ]
示例:
> SELECT PERCENTILE(water_level,5),location FROM h2o_feet name: h2o_feet--------------time percentile location2015-08-28T12:06:00Z 1.122 santa_monica
就是将water_level字段按照不同的location求百分比,然后取第五位数据。
作用:返回一个字段在一个series中的变化率。
InfluxDB会计算按照时间进行排序的字段值之间的差异,并将这些结果转化为单位变化率。其中,单位可以指定,默认为1s。
语法:
SELECT DERIVATIVE(, [ ]) FROM [WHERE ]
其中,unit取值可以为以下几种:
u --microsecondss --secondsm --minutesh --hoursd --daysw --weeks
DERIVATIVE()函数还可以在GROUP BY time()的条件下与聚合函数嵌套使用,格式如下:
SELECT DERIVATIVE(AGGREGATION_FUNCTION(),[ ]) FROM WHERE GROUP BY time( )
示例:
假设location = santa_monica 条件下数据有以下几条:
name: h2o_feet--------------time water_level2015-08-18T00:00:00Z 2.0642015-08-18T00:06:00Z 2.1162015-08-18T00:12:00Z 2.0282015-08-18T00:18:00Z 2.1262015-08-18T00:24:00Z 2.0412015-08-18T00:30:00Z 2.051
计算每一秒的变化率:
> SELECT DERIVATIVE(water_level) FROM h2o_feet WHERE location = 'santa_monica' LIMIT 5name: h2o_feet--------------time derivative2015-08-18T00:06:00Z 0.000144444444444444572015-08-18T00:12:00Z -0.000244444444444444652015-08-18T00:18:00Z 0.00027222222222222182015-08-18T00:24:00Z -0.0002361111111111112015-08-18T00:30:00Z 2.777777777777842e-05
第一行数据的计算公式为(2.116 - 2.064) / (360s / 1s)
计算每六分钟的变化率
> SELECT DERIVATIVE(water_level,6m) FROM h2o_feet WHERE location = 'santa_monica' LIMIT 5name: h2o_feet--------------time derivative2015-08-18T00:06:00Z 0.0520000000000000462015-08-18T00:12:00Z -0.088000000000000082015-08-18T00:18:00Z 0.097999999999999862015-08-18T00:24:00Z -0.084999999999999962015-08-18T00:30:00Z 0.010000000000000231
第一行数据的计算过程如下:(2.116 - 2.064) / (6m / 6m)
计算每12分钟的变化率:
> SELECT DERIVATIVE(water_level,12m) FROM h2o_feet WHERE location = 'santa_monica' LIMIT 5name: h2o_feet--------------time derivative2015-08-18T00:06:00Z 0.104000000000000092015-08-18T00:12:00Z -0.176000000000000162015-08-18T00:18:00Z 0.195999999999999732015-08-18T00:24:00Z -0.169999999999999932015-08-18T00:30:00Z 0.020000000000000462
第一行数据计算过程为:(2.116 - 2.064 / (6m / 12m)
计算每12分钟最大值的变化率
> SELECT DERIVATIVE(MAX(water_level)) FROM h2o_feet WHERE location = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' AND time < '2015-08-18T00:36:00Z' GROUP BY time(12m) name: h2o_feet--------------time derivative2015-08-18T00:12:00Z 0.0099999999999997872015-08-18T00:24:00Z -0.07499999999999973
这个函数功能非常多,也非常复杂,更多对于此功能的详细解释请看官网:https://docs.influxdata.com/influxdb/v0.13/query_language/functions/#derivative
作用:返回一个字段中连续的时间值之间的差异。字段类型必须是长整型或float64。
最基本的语法:
SELECT DIFFERENCE() FROM [WHERE ]
与GROUP BY time()以及其他嵌套函数一起使用的语法格式:
SELECT DIFFERENCE(( )) FROM WHERE GROUP BY time( )
其中,函数可以包含以下几个:
COUNT(), MEAN(), MEDIAN(),SUM(), FIRST(), LAST(), MIN(), MAX(), 和 PERCENTILE()。
使用示例
例子中使用的源数据如下所示:
> SELECT water_level FROM h2o_feet WHERE location='santa_monica' AND time >= '2015-08-18T00:00:00Z' and time <= '2015-08-18T00:36:00Z'name: h2o_feet--------------time water_level2015-08-18T00:00:00Z 2.0642015-08-18T00:06:00Z 2.1162015-08-18T00:12:00Z 2.0282015-08-18T00:18:00Z 2.1262015-08-18T00:24:00Z 2.0412015-08-18T00:30:00Z 2.0512015-08-18T00:36:00Z 2.067
计算water_level间的差异:
> SELECT DIFFERENCE(water_level) FROM h2o_feet WHERE location='santa_monica' AND time >= '2015-08-18T00:00:00Z' and time <= '2015-08-18T00:36:00Z'name: h2o_feet--------------time difference2015-08-18T00:06:00Z 0.0520000000000000462015-08-18T00:12:00Z -0.088000000000000082015-08-18T00:18:00Z 0.097999999999999862015-08-18T00:24:00Z -0.084999999999999962015-08-18T00:30:00Z 0.0100000000000002312015-08-18T00:36:00Z 0.016000000000000014
数据类型都为float类型。
作用:返回一个字段在连续的时间间隔间的差异,间隔单位可选,默认为1纳秒。
语法:
SELECT ELAPSED(, ) FROM [WHERE ]
示例:
计算h2o_feet字段在纳秒间隔下的差异。
> SELECT ELAPSED(water_level) FROM h2o_feet WHERE location = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' and time <= '2015-08-18T00:24:00Z'name: h2o_feet--------------time elapsed2015-08-18T00:06:00Z 3600000000002015-08-18T00:12:00Z 3600000000002015-08-18T00:18:00Z 3600000000002015-08-18T00:24:00Z 360000000000
在一分钟间隔下的差异率:
> SELECT ELAPSED(water_level,1m) FROM h2o_feet WHERE location = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' and time <= '2015-08-18T00:24:00Z'name: h2o_feet--------------time elapsed2015-08-18T00:06:00Z 62015-08-18T00:12:00Z 62015-08-18T00:18:00Z 62015-08-18T00:24:00Z 6
注意:如果设置的时间间隔比字段数据间的时间间隔更大时,则函数会返回0,如下所示:
> SELECT ELAPSED(water_level,1h) FROM h2o_feet WHERE location = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' and time <= '2015-08-18T00:24:00Z'name: h2o_feet--------------time elapsed2015-08-18T00:06:00Z 02015-08-18T00:12:00Z 02015-08-18T00:18:00Z 02015-08-18T00:24:00Z 0
作用:返回一个连续字段值的移动平均值,字段类型必须是长整形或者float64类型。
语法:
基本语法
SELECT MOVING_AVERAGE(, ) FROM [WHERE ]
与其他函数和GROUP BY time()语句一起使用时的语法
SELECT MOVING_AVERAGE(( ), ) FROM WHERE GROUP BY time( )
此函数可以和以下函数一起使用:
COUNT(), MEAN(),MEDIAN(), SUM(), FIRST(), LAST(), MIN(), MAX(), and PERCENTILE().
示例:
> SELECT water_level FROM h2o_feet WHERE location = 'santa_monica' AND time >= '2015-08-18T00:00:00Z' and time <= '2015-08-18T00:36:00Z'name: h2o_feet--------------time water_level2015-08-18T00:00:00Z 2.0642015-08-18T00:06:00Z 2.1162015-08-18T00:12:00Z 2.0282015-08-18T00:18:00Z 2.1262015-08-18T00:24:00Z 2.0412015-08-18T00:30:00Z 2.0512015-08-18T00:36:00Z 2.067
作用:返回在一个series中的一个字段中值的变化的非负速率。
语法:
SELECT NON_NEGATIVE_DERIVATIVE(, [ ]) FROM [WHERE ]
与聚合类函数放在一起使用时的语法如下所示:
SELECT NON_NEGATIVE_DERIVATIVE(AGGREGATION_FUNCTION(),[ ]) FROM WHERE GROUP BY time( )
此函数示例请参阅:DERIVATIVE()函数
作用:返回一个字段中的值的标准偏差。值的类型必须是长整型或float64类型。
语法:
SELECT STDDEV() FROM [WHERE ] [GROUP BY ]
示例:
> SELECT STDDEV(water_level) FROM h2o_feet name: h2o_feet--------------time stddev1970-01-01T00:00:00Z 2.279144584196145
示例2:
> SELECT STDDEV(water_level) FROM h2o_feet WHERE time >= '2015-08-18T00:00:00Z' and time < '2015-09-18T12:06:00Z' GROUP BY time(1w), location name: h2o_feet tags: location = coyote_creek time stddev---- ------2015-08-13T00:00:00Z 2.24372630801939852015-08-20T00:00:00Z 2.1212761501447192015-08-27T00:00:00Z 3.04161221707862152015-09-03T00:00:00Z 2.53480650254352072015-09-10T00:00:00Z 2.5840039548826732015-09-17T00:00:00Z 2.2587514836274414name: h2o_feet tags: location = santa_monica time stddev---- ------2015-08-13T00:00:00Z 1.111563445875532015-08-20T00:00:00Z 1.09098492790823662015-08-27T00:00:00Z 1.98701161800969622015-09-03T00:00:00Z 1.35167784509020672015-09-10T00:00:00Z 1.49605738115005882015-09-17T00:00:00Z 1.075701669442093