GROUP BY子句用于结合聚合函数,根据一个或多个列对分析结果进行分组。GROUP BY子句还支持搭配ROLLUP子句、CUBE子句和GROUPING SETS子句,扩展分组功能。
语法
- GROUP BY
对分析结果进行分组。
SELECT key, ... aggregate function GROUP BY key,...
- GROUP BY ROLLUP
GROUP BY ROLLUP子句按照汇总分组,支持为每个分组返回一个小计,为所有分组返回一个总计。例如GROUP BY ROLLUP (a, b),结果集为(a,
b)、(a, null) 和 (null, null) 。SELECT key, ... aggregate function GROUP BY ROLLUP (key,...)
- GROUP BY CUBE
GROUP BY CUBE子句按照所有可能的列组合进行分组。例如GROUP BY CUBE (a, b),结果集为(a, b)、(null, b)、(a, null)
和 (null, null) 。SELECT key, ... aggregate function GROUP BY CUBE (key,...)
- GROUP BY GROUPING SETS
GROUP BY GROUPING SETS子句按照列依次进行分组。例如GROUP BY GROUPING SETS (a, b),结果集为(a, null)和(null,
b)。SELECT key, ... aggregate function GROUP BY GROUPING SETS (key,...)
注意 在SQL语句中,如果您使用了GROUP BY子句,则在执行SELECT语句时,只能选择GROUP BY的列或者对任意列进行聚合计算,不允许选择非GROUP BY的列。例如* | SELECT status, request_time, COUNT(*) AS PV GROUP BY status
为非法分析语句,因为request_time不是GROUP BY的列。正确语句为* | SELECT status, arbitrary(request_time), count(*) AS PV GROUP BY status
。
参数说明
参数 | 说明 |
---|---|
key | 日志字段名称或聚合函数计算结果列,即支持按照日志字段名称或聚合函数计算结果列进行分组。
GROUP BY子句支持单列或多列。 |
aggregate function | 聚合函数。GROUP BY子句常与min、max、avg、sum、count等聚合函数搭配使用。更多信息,请参见聚合函数。 |
示例
示例1
统计不同状态码对应的请求次数。
- 查询和分析语句
* | SELECT status, count(*) AS PV GROUP BY status
- 查询和分析结果
示例2
按照每小时的时间粒度计算网站访问PV。其中,__time__字段为日志服务中的保留字段,表示时间列。time为date_trunc('hour', __time__)
的别名。date_trunc函数的更多信息,请参见date_trunc函数。
- 查询和分析语句
* | SELECT count(*) AS PV, date_trunc('hour', __time__) AS time GROUP BY time ORDER BY time LIMIT 1000
- 查询和分析结果
示例3
按照每5分钟的时间粒度计算PV。
- 查询和分析语句
因为date_trunc函数只能按照固定时间间隔统计。如果您需要按照自定义的时间进行统计分析,请按照数学取模方法进行分组。例如%300表示按照5分钟的时间粒度进行取模对齐。
* | SELECT count(*) AS PV, __time__-__time__ % 300 AS time GROUP BY time LIMIT 1000
- 查询和分析结果
示例4
根据请求方法和请求状态分组,先计算各个请求方法对应的访问数据,再计算各个请求状态对应的访问数量。
- 查询和分析语句
* | SELECT request_method, status, count(*) AS PV GROUP BY GROUPING SETS (request_method, status)
- 查询和分析结果
示例5
根据请求方法和请求状态分组,分组集包括(null, null)、(request_method, null)、(null, status)和(request_method,
status),计算以上各个分组的访问数量。
- 查询和分析语句
* | SELECT request_method, status, count(*) AS PV GROUP BY CUBE (request_method, status)
- 查询和分析结果
示例6
根据请求方法和请求状态分组,分组集包括(request_method, status)、(request_method, null)和(null, null),计算以上各个分组的访问数量。
- 查询和分析语句
* | SELECT request_method, status, count(*) AS PV GROUP BY ROLLUP (request_method, status)
- 查询和分析结果
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家
阿里云企业补贴进行中: 马上申请
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠
转转请注明出处:https://www.yunxiaoer.com/161782.html