InfluxDB 的聚合类函数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zx711166/article/details/84541198

常用聚合函数

count()函数
  1. 返回一个(field)字段中的非空值的数量。返回一个(field)字段中的非空值的数量。

  2. 语法:

    SELECT COUNT(<field_key>) FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
    

    示例:

    >SELECT COUNT(water_level) FROM h2o_feet
    name: h2o_feet
    --------------
    time                     count
    1970-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                     count
    2015-08-17T00:00:00Z     1440
    2015-08-21T00:00:00Z     1920
    2015-08-25T00:00:00Z     1920
    2015-08-29T00:00:00Z     1920
    2015-09-02T00:00:00Z     1915
    2015-09-06T00:00:00Z     1920
    2015-09-10T00:00:00Z     1920
    2015-09-14T00:00:00Z     1920
    2015-09-18T00:00:00Z     335
    

    这样结果中会包含时间结果。

DISTINCT()函数
  1. 返回一个字段(field)的唯一值。
  2. 语法:
    SELECT DISTINCT(<field_key>) FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
    
    示例:
    > SELECT DISTINCT("level description") FROM h2o_feet
    name: h2o_feet
    --------------
    time                     distinct
    1970-01-01T00:00:00Z     between 6 and 9 feet
    1970-01-01T00:00:00Z     below 3 feet
    1970-01-01T00:00:00Z     between 3 and 6 feet
    1970-01-01T00:00:00Z     at or greater than 9 feet
    
    这个例子显示level description这个字段共有四个值,然后将其显示了出来,时间为默认时间。
MEAN() 函数
  1. 返回一个字段(field)中的值的算术平均值(平均值)。字段类型必须是长整型或float64。
  2. 语法:
    SELECT MEAN(<field_key>) FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
    
    示例:
    > SELECT MEAN(water_level) FROM h2o_feet
    name: h2o_feet
    --------------
    time                     mean
    1970-01-01T00:00:00Z     4.286791371454075
    
    说明water_level字段的平均值为4.286791371454075
    时间为默认时间,当然,你也可以加入where条件。
MEDIAN()函数
  1. 从单个字段(field)中的排序值返回中间值(中位数)。字段值的类型必须是长整型或float64格式。
  2. 语法:
    SELECT MEDIAN(<field_key>) FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
    
    示例:
    > SELECT MEDIAN(water_level) from h2o_feet
    name: h2o_feet
    --------------
    time                     median
    1970-01-01T00:00:00Z     4.124
    
    说明表中 water_level字段的中位数是 4.124
SPREAD()函数
  1. 返回字段的最小值和最大值之间的差值。数据的类型必须是长整型或float64。
  2. 语法:
    SELECT SPREAD(<field_key>) FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
    
    示例:
    > SELECT SPREAD(water_level) FROM h2o_feet
    name: h2o_feet
    --------------
    time                      spread
    1970-01-01T00:00:00Z      10.574
    
SUM()函数
  1. 返回一个字段中的所有值的和。字段的类型必须是长整型或float64。

  2. 语法:

    SELECT SUM(<field_key>) FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
    

    示例:

    > SELECT SUM(water_level) FROM h2o_feet
    name: h2o_feet
    --------------
    time                     sum
    1970-01-01T00:00:00Z     67777.66900000002
    

    此语句计算出了 h2o_feet表中 所有 water_level 字段的和。

TOP()函数
  1. 返回一个字段中最大的N个值,字段类型必须是长整型或float64类型。
  2. 语法:语法:
    SELECT TOP( <field_key>[,<tag_key(s)>],<N> )[,<tag_key(s)>|<field_key(s)>] [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]
    
    示例:
    > SELECT TOP("water_level",3) FROM "h2o_feet"
    name: h2o_feet
    time                   top
    ----                   ---
    2015-08-29T07:18:00Z   9.957
    2015-08-29T07:24:00Z   9.964
    2015-08-29T07:30:00Z   9.954
    
    这个例子返回表中 water_level字段中最大的三个值。
BOTTOM()函数
  1. 返回一个字段中最小的N个值。字段类型必须是长整型或float64类型。

  2. 语法:

    SELECT BOTTOM(<field_key>[,<tag_keys>],<N>)[,<tag_keys>] FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
    

    示例:

    > SELECT BOTTOM(water_level,3) FROM h2o_feet
    name: h2o_feet
    --------------
    time                     bottom
    2015-08-29T14:30:00Z     -0.61
    2015-08-29T14:36:00Z     -0.591
    2015-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     location
    2015-08-29T10:36:00Z     -0.243     santa_monica
    2015-08-29T14:30:00Z     -0.61      coyote_creek
    

    语句取最小的三个值,然而结果只返回了2个值,因为 location 这个tag只有 两个取值。

FIRST()函数
  1. 返回一个字段中最老的取值。
  2. 语法:
    SELECT FIRST(<field_key>)[,<tag_key(s)>] FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
    
    示例:
    > SELECT FIRST(water_level) FROM h2o_feet WHERE location = 'santa_monica'
    name: h2o_feet
    --------------
    time                     first
    2015-08-18T00:00:00Z     2.064在这里插入代码片
    
    这个语句返回了 在 location为santa_monica条件下,最旧的那个water_level字段的取值和时间。
LAST()函数
  1. 返回一个字段中最新的取值。
  2. 语法:
    SELECT LAST(<field_key>)[,<tag_key(s)>] FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
    
    示例:
    > 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      location
    2015-08-18T00:54:00Z     6.982     coyote_creek
    
MAX()函数
  1. 返回一个字段中的最大值。该字段类型必须是长整型,float64,或布尔类型。
  2. 语法:
    SELECT MAX(<field_key>)[,<tag_key(s)>] FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
    
    示例:
    > SELECT MAX(water_level),location FROM h2o_feet
    name: h2o_feet
    --------------
    time                     max       location
    2015-08-29T07:24:00Z     9.964     coyote_creek
    
MIN()函数
  1. 返回一个字段中的最小值。该字段类型必须是长整型,float64,或布尔类型。
  2. 语法:
    SELECT MIN(<field_key>)[,<tag_key(s)>] FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
    
    示例:
    > SELECT MIN(water_level),location FROM h2o_feet
    name: h2o_feet
    --------------
    time                    min       location
    2015-08-29T14:30:00Z    -0.61     coyote_creek
    
PERCENTILE()函数
  1. 返回排序值排位为N的百分值。字段的类型必须是长整型或float64。
    百分值是介于100到0之间的整数或浮点数,包括100。
  2. 语法:
    SELECT PERCENTILE(<field_key>, <N>)[,<tag_key(s)>] FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
    
    示例:
    > SELECT PERCENTILE(water_level,5),location FROM h2o_feet
    name: h2o_feet
    --------------
    time                      percentile     location
    2015-08-28T12:06:00Z      1.122             santa_monica
    
    就是将water_level字段按照不同的location求百分比,然后取第五位数据。
DERIVATIVE()函数
  1. 返回一个字段在一个series中的变化率。
    InfluxDB会计算按照时间进行排序的字段值之间的差异,并将这些结果转化为单位变化率。其中,单位可以指定,默认为1s。
  2. 语法:
    SELECT DERIVATIVE(<field_key>, [<unit>]) FROM <measurement_name> [WHERE <stuff>]
    
    其中,unit取值可以为以下几种:
    u --microseconds
    s --seconds
    m --minutes
    h --hours
    d --days
    w --weeks
    
    DERIVATIVE()函数还可以在GROUP BY time()的条件下与聚合函数嵌套使用,格式如下:
    SELECT DERIVATIVE(AGGREGATION_FUNCTION(<field_key>),[<unit>]) FROM <measurement_name> WHERE <stuff> GROUP BY time(<aggregation_interval>)
    
    示例:
    假设location = santa_monica 条件下数据有以下几条:
    name: h2o_feet
    --------------
    time                     water_level
    2015-08-18T00:00:00Z     2.064
    2015-08-18T00:06:00Z     2.116
    2015-08-18T00:12:00Z     2.028
    2015-08-18T00:18:00Z     2.126
    2015-08-18T00:24:00Z     2.041
    2015-08-18T00:30:00Z     2.051
    
    计算每一秒的变化率:
    > SELECT DERIVATIVE(water_level) FROM h2o_feet WHERE location = 'santa_monica' LIMIT 5
    name: h2o_feet
    --------------
    time                     derivative
    2015-08-18T00:06:00Z     0.00014444444444444457
    2015-08-18T00:12:00Z     -0.00024444444444444465
    2015-08-18T00:18:00Z     0.0002722222222222218
    2015-08-18T00:24:00Z     -0.000236111111111111
    2015-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 5
    name: h2o_feet
    --------------
    time                     derivative
    2015-08-18T00:06:00Z     0.052000000000000046
    2015-08-18T00:12:00Z     -0.08800000000000008
    2015-08-18T00:18:00Z     0.09799999999999986
    2015-08-18T00:24:00Z     -0.08499999999999996
    2015-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 5
    name: h2o_feet
    --------------
    time                     derivative
    2015-08-18T00:06:00Z     0.10400000000000009
    2015-08-18T00:12:00Z     -0.17600000000000016
    2015-08-18T00:18:00Z     0.19599999999999973
    2015-08-18T00:24:00Z     -0.16999999999999993
    2015-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                     derivative
    2015-08-18T00:12:00Z     0.009999999999999787
    2015-08-18T00:24:00Z     -0.07499999999999973
    
    这个函数功能非常多,也非常复杂,更多对于此功能的详细解释请看官网
DIFFERENCE()函数
  1. 返回一个字段中连续的时间值之间的差异。字段类型必须是长整型或float64。

  2. 语法:

    SELECT DIFFERENCE(<field_key>) FROM <measurement_name> [WHERE <stuff>]
    

    与GROUP BY time()以及其他嵌套函数一起使用的语法格式:

    SELECT DIFFERENCE(<function>(<field_key>)) FROM <measurement_name> WHERE <stuff> GROUP BY time(<time_interval>)
    

    其中,函数可以包含以下几个: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_level
    2015-08-18T00:00:00Z      2.064
    2015-08-18T00:06:00Z      2.116
    2015-08-18T00:12:00Z      2.028
    2015-08-18T00:18:00Z      2.126
    2015-08-18T00:24:00Z      2.041
    2015-08-18T00:30:00Z      2.051
    2015-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                      difference
    2015-08-18T00:06:00Z      0.052000000000000046
    2015-08-18T00:12:00Z      -0.08800000000000008
    2015-08-18T00:18:00Z      0.09799999999999986
    2015-08-18T00:24:00Z      -0.08499999999999996
    2015-08-18T00:30:00Z      0.010000000000000231
    2015-08-18T00:36:00Z      0.016000000000000014
    

    数据类型都为float类型。

ELAPSED()函数
  1. 返回一个字段在连续的时间间隔间的差异,间隔单位可选,默认为1纳秒。
    单位可选项如下图:
Units Meaning
u 微秒
ms 毫秒
s
m 分钟
h 小时
d
w
  1. 语法
    SELECT ELAPSED(<field_key>, <unit>) FROM <measurement_name> [WHERE <stuff>]
    
    示例:
    计算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                      elapsed
    2015-08-18T00:06:00Z      360000000000
    2015-08-18T00:12:00Z      360000000000
    2015-08-18T00:18:00Z      360000000000
    2015-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                      elapsed
    2015-08-18T00:06:00Z      6
    2015-08-18T00:12:00Z      6
    2015-08-18T00:18:00Z      6
    2015-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                            elapsed
    2015-08-18T00:06:00Z      0
    2015-08-18T00:12:00Z      0
    2015-08-18T00:18:00Z      0
    2015-08-18T00:24:00Z      0
    
MOVING_AVERAGE()函数
  1. 返回一个连续字段值的移动平均值,字段类型必须是长整形或者float64类型。

  2. 语法:

    SELECT MOVING_AVERAGE(<field_key>,<window>) FROM <measurement_name> [WHERE <stuff>]
    

    与其他函数和GROUP BY time()语句一起使用时的语法

    SELECT MOVING_AVERAGE(<function>(<field_key>),<window>) FROM <measurement_name> WHERE <stuff> GROUP BY time(<time_interval>)
    

    此函数可以和以下函数一起使用:count(), mean(),median(),sum(),firsst(),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_level
    2015-08-18T00:00:00Z      2.064
    2015-08-18T00:06:00Z      2.116
    2015-08-18T00:12:00Z      2.028
    2015-08-18T00:18:00Z      2.126
    2015-08-18T00:24:00Z      2.041
    2015-08-18T00:30:00Z      2.051
    2015-08-18T00:36:00Z      2.067
    
NON_NEGATIVE_DERIVATIVE()函数
  1. 返回在一个series中的一个字段中值的变化的非负速率。
    其中unit取值可以为以下几个:
Units Meaning
u 微秒
ms 毫秒
s
m 分钟
h 小时
d
w
  1. 语法:

    SELECT NON_NEGATIVE_DERIVATIVE(<field_key>, [<unit>]) FROM <measurement_name> [WHERE <stuff>]
    

    与聚合类函数放在一起使用时的语法如下所示:

    SELECT NON_NEGATIVE_DERIVATIVE(AGGREGATION_FUNCTION(<field_key>),[<unit>]) FROM <measurement_name> WHERE <stuff> GROUP BY time(<aggregation_interval>)
    

    此函数示例请参阅:DERIVATIVE()函数

STDDEV()函数
  1. 返回一个字段中的值的标准偏差。值的类型必须是长整型或float64类型。
  2. 语法:
    SELECT STDDEV(<field_key>) FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
    
    示例:
    > SELECT STDDEV(water_level) FROM h2o_feet
    name: h2o_feet
    --------------
    time                     stddev
    1970-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.2437263080193985
    2015-08-20T00:00:00Z     2.121276150144719
    2015-08-27T00:00:00Z     3.0416122170786215
    2015-09-03T00:00:00Z     2.5348065025435207
    2015-09-10T00:00:00Z     2.584003954882673
    2015-09-17T00:00:00Z     2.2587514836274414
    
    name: h2o_feet
    tags: location = santa_monica
    time                     stddev
    ----                     ------
    2015-08-13T00:00:00Z     1.11156344587553
    2015-08-20T00:00:00Z     1.0909849279082366
    2015-08-27T00:00:00Z     1.9870116180096962
    2015-09-03T00:00:00Z     1.3516778450902067
    2015-09-10T00:00:00Z     1.4960573811500588
    2015-09-17T00:00:00Z     1.075701669442093
    

猜你喜欢

转载自blog.csdn.net/zx711166/article/details/84541198