GROUP BY子句通过以下方式对查询结果进行分组:
语法 1 SELECT_clause FROM_clause [WHERE_clause] GROUP BY [* | < tag_key> [,< tag_key]]
示例 按一个tag对记过进行分组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 > SELECT MEAN("water_level") FROM "h2o_feet" GROUP BY "location"name: h2o_feet tags: location= coyote_creek time mean1970 -01 -01 T00:00 :00 Z 5.359342451341401 name: h2o_feet tags: location= santa_monica time mean1970 -01 -01 T00:00 :00 Z 3.530863470081006
按多个tag对结果进行分组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 > SELECT MEAN("index") FROM "h2o_quality" GROUP BY location,randtagname: h2o_quality tags: location= coyote_creek, randtag= 1 time mean1970 -01 -01 T00:00 :00 Z 50.69033760186263 name: h2o_quality tags: location= coyote_creek, randtag= 2 time mean1970 -01 -01 T00:00 :00 Z 49.661867544220485 name: h2o_quality tags: location= coyote_creek, randtag= 3 time mean1970 -01 -01 T00:00 :00 Z 49.360939907550076 name: h2o_quality tags: location= santa_monica, randtag= 1 time mean1970 -01 -01 T00:00 :00 Z 49.132712456344585 name: h2o_quality tags: location= santa_monica, randtag= 2 time mean1970 -01 -01 T00:00 :00 Z 50.2937984496124 name: h2o_quality tags: location= santa_monica, randtag= 3 time mean1970 -01 -01 T00:00 :00 Z 49.99919903884662
按所有tag对结果进行分组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 > SELECT MEAN("index") FROM "h2o_quality" GROUP BY * name: h2o_quality tags: location= coyote_creek, randtag= 1 time mean1970 -01 -01 T00:00 :00 Z 50.55405446521169 name: h2o_quality tags: location= coyote_creek, randtag= 2 time mean1970 -01 -01 T00:00 :00 Z 50.49958856271162 name: h2o_quality tags: location= coyote_creek, randtag= 3 time mean1970 -01 -01 T00:00 :00 Z 49.5164137518956 name: h2o_quality tags: location= santa_monica, randtag= 1 time mean1970 -01 -01 T00:00 :00 Z 50.43829082296367 name: h2o_quality tags: location= santa_monica, randtag= 2 time mean1970 -01 -01 T00:00 :00 Z 52.0688508894012 name: h2o_quality tags: location= santa_monica, randtag= 3 time mean1970 -01 -01 T00:00 :00 Z 49.29386362086556
GROUP BY time intervals 语法 1 SELECT < function > (< field_key> ) FROM_clause WHERE < time_range> GROUP BY time (< time_interval> ),[tag_key] [fill(< fill_option> )]
time(time_interval) timer_interval是一个时间间隔,例如time_interval是5m,那查询结果会按5分钟进行分组。
fill() fill选项用来设置没有数据的时间间隔的默认值。
示例 示例使用以下数据作为样本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 > SELECT "water_level","location" FROM "h2o_feet" WHERE time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z' name: h2o_feet time water_level location2015 -08 -18 T00:00 :00 Z 8.12 coyote_creek2015 -08 -18 T00:00 :00 Z 2.064 santa_monica2015 -08 -18 T00:06 :00 Z 8.005 coyote_creek2015 -08 -18 T00:06 :00 Z 2.116 santa_monica2015 -08 -18 T00:12 :00 Z 7.887 coyote_creek2015 -08 -18 T00:12 :00 Z 2.028 santa_monica2015 -08 -18 T00:18 :00 Z 7.762 coyote_creek2015 -08 -18 T00:18 :00 Z 2.126 santa_monica2015 -08 -18 T00:24 :00 Z 7.635 coyote_creek2015 -08 -18 T00:24 :00 Z 2.041 santa_monica2015 -08 -18 T00:30 :00 Z 7.5 coyote_creek2015 -08 -18 T00:30 :00 Z 2.051 santa_monica
按12分钟的时间间隔来分组(第一行的数据覆盖范围2015-08-18T00:00:00Z到2015-08-18T00:12:00Z,包括开始不包括结尾)
1 2 3 4 5 6 7 8 > 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 (12 m)name: h2o_feet time count2015 -08 -18 T00:00 :00 Z 2 2015 -08 -18 T00:12 :00 Z 2 2015 -08 -18 T00:24 :00 Z 2
按12分钟间隔和一个tag来分组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 > SELECT COUNT ("water_level") FROM "h2o_feet" WHERE time >= '2015-08-18T00:00:00Z' AND time <= '2015-08-18T00:30:00Z' GROUP BY time (12 m),"location"name: h2o_feet tags: location= coyote_creek time count2015 -08 -18 T00:00 :00 Z 2 2015 -08 -18 T00:12 :00 Z 2 2015 -08 -18 T00:24 :00 Z 2 name: h2o_feet tags: location= santa_monica time count2015 -08 -18 T00:00 :00 Z 2 2015 -08 -18 T00:12 :00 Z 2 2015 -08 -18 T00:24 :00 Z 2