GROUP BY子句用于结合聚合函数,根据一个或多个列对分析结果进行分组。GROUP BY子句还支持搭配ROLLUP子句、CUBE子句和GROUPING SETS子句,扩展分组功能。
注意
在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
。
按照每小时的时间粒度计算网站访问PV。其中,
__time__
字段为日志服务中的保留字段,表示时间列。
time
为
date_trunc('hour', __time__)
的别名。date_trunc函数的更多信息,请参见
date_trunc函数
。
查询和分析语句
* |
SELECT
count(*) AS PV,
date_trunc('hour', __time__) AS time
GROUP BY
ORDER BY
LIMIT
查询和分析结果
按照每5分钟的时间粒度计算PV。
查询和分析语句
因为date_trunc函数只能按照固定时间间隔统计。如果您需要按照自定义的时间进行统计分析,请按照数学取模方法进行分组。例如%300表示按照5分钟的时间粒度进行取模对齐。
SELECT
count(*) AS PV,
__time__-__time__ % 300 AS time
GROUP BY
LIMIT
查询和分析结果
根据请求方法和请求状态分组,先计算各个请求方法对应的访问数据,再计算各个请求状态对应的访问数量。
查询和分析语句* |
SELECT
request_method,
status,
count(*) AS PV
GROUP BY
GROUPING SETS (request_method, status)
查询和分析结果
根据请求方法和请求状态分组,分组集包括(null, null)、(request_method, null)、(null, status)和(request_method,
status),计算以上各个分组的访问数量。
查询和分析语句* |
SELECT
request_method,
status,
count(*) AS PV
GROUP BY
CUBE (request_method, status)
查询和分析结果
根据请求方法和请求状态分组,分组集包括(request_method, status)、(request_method, null)和(null, null),计算以上各个分组的访问数量。
查询和分析语句* |
SELECT
request_method,
status,
count(*) AS PV
GROUP BY
ROLLUP (request_method, status)
查询和分析结果