influxDB聚合類函數


1)count()函數

返回一個(field)字段中的非空值的數量。

SELECT COUNT(<field_key>) FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
例子1
計算非空water_level數量
>SELECT COUNT(water_level) FROM h2o_feet
結果 name: h2o_feet -------------- time count 1970-01-01T00:00:00Z 15258

說明 water_level這個字段在 h2o_feet表中共有15258條數據。

注意:聚合函數中如果沒有指定時間的話,會默認以 epoch 0 (1970-01-01T00:00:00Z) 作為時間。

可以在where 中加入時間條件,如下:

例子2

計算非空值water_level每4天時間間隔里的數量

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
這樣結果中會包含時間結果。

COUNT() and controlling the values reported for intervals with no data(控制時間間隔內沒有值的返回值)

其他的InfluxQL功能時函數間間隔內沒有值返回null值count()用0。添加  fill(<stuff>)到查詢里,用 <stuff>COUNT(),代替null值返回。用0來代替沒有值的間隔數,加入fill(<stuff>)來代替0來輸出count()數。c

Example:用  fill(none) to 去除0的間隔輸出數量

COUNT()不用 fill(none):

> SELECT COUNT(water_level) FROM h2o_feet WHERE location = 'santa_monica' AND time >= '2015-09-18T21:41:00Z' AND time <= '2015-09-18T22:41:00Z' GROUP BY time(30m)
name: h2o_feet
--------------
time			 count
2015-09-18T21:30:00Z	 1
2015-09-18T22:00:00Z	 0
2015-09-18T22:30:00Z	 0

COUNT() 用 fill(none):

> SELECT COUNT(water_level) FROM h2o_feet WHERE location = 'santa_monica' AND time >= '2015-09-18T21:41:00Z' AND time <= '2015-09-18T22:41:00Z' GROUP BY time(30m) fill(none)
name: h2o_feet
--------------
time			count
2015-09-18T21:30:00Z	 1

For a more general discussion of fill(), see Data Exploration.

 

2、DISTINCT()函數

返回一個字段(field)的唯一值。

語法:

SELECT DISTINCT(<field_key>) FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
例子1
在level description選擇唯一的值
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這個字段共有四個值,然后將其顯示了出來,時間為默認時間。
注:聚合函數返回的時代0(1970-01-01t00:00:00z)為時間戳,除非您指定一個下界的時間范圍。然后返回下界作為時間戳。

例子2
選擇唯一的值在leve description 以location 標簽分組
SELECT DISTINCT("level description") FROM h2o_feet GROUP BY location
結果
name: h2o_feet
tags: location=coyote_creek
time			   distinct
----			   --------
1970-01-01T00:00:00Z	  between 6 and 9 feet
1970-01-01T00:00:00Z	  between 3 and 6 feet
1970-01-01T00:00:00Z	  below 3 feet
1970-01-01T00:00:00Z	  at or greater than 9 feet


name: h2o_feet
tags: location=santa_monica
time			   distinct
----			   --------
1970-01-01T00:00:00Z	  below 3 feet
1970-01-01T00:00:00Z	  between 3 and 6 feet
1970-01-01T00:00:00Z	  between 6 and 9 feet

例子3
聚合函數DISTINCT() 使用count(),以location分組獲得level_description的唯一數量
SELECT COUNT(DISTINCT("level description")) FROM h2o_feet GROUP BY location
結果
name: h2o_feet
tags: location = coyote_creek
time			count
----			 -----
1970-01-01T00:00:00Z	 4

name: h2o_feet
tags: location = santa_monica
time			count
----			 -----
1970-01-01T00:00:00Z	 3
 

3)MEAN() 函數

返回一個字段(field)中的值的算術平均值(平均值)。字段類型必須是長整型或float64。

語法格式

SELECT MEAN(<field_key>) FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
例子1
計算water_level的平均值
SELECT MEAN(water_level) FROM h2o_feet
結果
name: h2o_feet
--------------
time			  mean
1970-01-01T00:00:00Z	 4.286791371454075

解釋:

  說明water_level字段的平均值為4.286791371454075

  時間為默認時間,當然,你也可以加入where條件。

注意:

聚合函數返回的時代0(1970-01-01t00:00:00z)為時間戳,除非您指定一個下界的時間范圍。然后他們返回下界的時間戳。
在float64點同一套執行mean()可能會產生稍微不同的結果。
InfluxDB之前不適用的功能,結果在那些小差異排序分。

例子2、計算wate_level以4天為間隔的平均值
SELECT MEAN(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			   mean
2015-08-17T00:00:00Z	 4.322029861111125
2015-08-21T00:00:00Z	 4.251395512375667
2015-08-25T00:00:00Z	 4.285036458333324
2015-08-29T00:00:00Z	 4.469495801899061
2015-09-02T00:00:00Z	 4.382785378590083
2015-09-06T00:00:00Z	 4.28849666349042
2015-09-10T00:00:00Z	 4.658127604166656
2015-09-14T00:00:00Z	 4.763504687500006
2015-09-18T00:00:00Z	 4.232829850746268

4、MEDIAN()函數

從單個字段(field)中的排序值返回中間值(中位數)。中值是在一組數值中居於中間的數值。字段值的類型必須是長整型或float64格式。

語法:

SELECT MEDIAN(<field_key>) FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
注:median()幾乎相當於PERCENTILE(field_key, 50),如果參數集合中包含偶數個數字,函數 MEDIAN 將返回位於中間的兩個數的平均值。
中值 中值是一組數中間位置的數;即一半數的值比中值大,另一半數的值比中值小。例如,2、3、3、5、7 和 10 的中值是 4
例子1
選擇water_level的中間值
SELECT MEDIAN(water_level) from h2o_feet
結果
name: h2o_feet
--------------
time			 median
1970-01-01T00:00:00Z	 4.124
解釋:
說明表中 water_level字段的中位數是 4.124
注:聚合函數返回的時代0(1970-01-01t00:00:00z)為時間戳,除非您指定一個下界的時間范圍。然后返回下界作為時間戳。 
例子2
選擇時間在2015年8月18日和8月18日30分,以location分組water_level的中間值
SELECT MEDIAN(water_level) FROM h2o_feet WHERE time >= '2015-08-18T00:00:00Z' AND time < '2015-08-18T00:36:00Z' GROUP BY location
結果
name: h2o_feet
tags: location = coyote_creek
time			 median
----			 ------
2015-08-18T00:00:00Z	 7.8245

name: h2o_feet
tags: location = santa_monica
time			 median
----			 ------
2015-08-18T00:00:00Z	 2.0575

5)SPREAD()函數

返回字段的最小值和最大值之間的差值。數據的類型必須是長整型或float64。
語法
SELECT SPREAD(<field_key>) FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
例子1
計算water_level的最小值 與最大值 之間差
SELECT SPREAD(water_level) FROM h2o_feet
結果
name: h2o_feet
--------------
time			 spread
1970-01-01T00:00:00Z	  10.574
注意:

聚合函數返回的時代0(1970-01-01t00:00:00z)為時間戳,除非您指定一個下界的時間范圍。然后他們回到下界的時間戳。
在float64點同一套執行spread()可能會產生稍微不同的結果。InfluxDB之前不適用的功能,結果在那些小差異排序分。

例子2
計算water_level的最小值 與最大值差,以30分鍾間隔,指定location為santa_monica,和一個時間范圍
SELECT SPREAD(water_level) FROM h2o_feet WHERE location = 'santa_monica' AND time >= '2015-09-18T17:00:00Z' AND time < '2015-09-18T20:30:00Z' GROUP BY time(30m)
結果
name: h2o_feet
--------------
time			                spread
2015-09-18T17:00:00Z	  0.16699999999999982
2015-09-18T17:30:00Z	  0.5469999999999997
2015-09-18T18:00:00Z	  0.47499999999999964
2015-09-18T18:30:00Z	  0.2560000000000002
2015-09-18T19:00:00Z	  0.23899999999999988
2015-09-18T19:30:00Z	  0.1609999999999996
2015-09-18T20:00:00Z	  0.16800000000000015

6)SUM()函數

返回一個字段中的所有值的和。字段的類型必須是長整型或float64。

語法:

SELECT SUM(<field_key>) FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
例子1
計算water_level的所有值的和
SELECT SUM(water_level) FROM h2o_feet
 結果
name: h2o_feet
--------------
time			  sum
1970-01-01T00:00:00Z	 67777.66900000002
注意:

聚合函數返回的時代0(1970-01-01t00:00:00z)為時間戳,除非您指定一個下界的時間范圍。然后他們回到下界的時間戳。
在float64點同一套執行sum()可能會產生稍微不同的結果。InfluxDB之前不適用的功能,結果在那些小差異排序分。

例子2 

計算以5天為分組,water_level的和

SELECT SUM(water_level) FROM h2o_feet WHERE time >= '2015-08-18T00:00:00Z' AND time < '2015-09-18T17:00:00Z' GROUP BY time(5d)

結果:
--------------
time			 sum
2015-08-18T00:00:00Z	 10334.908999999983
2015-08-23T00:00:00Z	 10113.356999999995
2015-08-28T00:00:00Z	 10663.683000000006
2015-09-02T00:00:00Z	 10451.321
2015-09-07T00:00:00Z	 10871.817999999994
2015-09-12T00:00:00Z	 11459.00099999999
2015-09-17T00:00:00Z	 3627.762000000003
nearly equivalent 

7)INTEGRAL()函數

返回曲線

語法:

SELECT INTEGRAL( [ * | <field_key> | /<regular_expression>/ ] [ , <unit> ]  ) [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause] 

8) STDDEV

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM