语法格式
* | SELECT 列名, 聚合函数 GROUP BY [ 列名 | 别名 | 序号 ]
注意
在 SQL 语句中,如果您使用了 GROUP BY 语法,则在执行 SELECT 语句时,只能选择 GROUP BY 的列或聚合计算函数,不允许选择非 GROUP BY 的列。例如
* | SELECT status, request_time, COUNT(*) AS PV GROUP BY status
为非法分析语句,因为 request_time 不是 GROUP BY 的列。GROUP BY 语法支持按照列名、别名或序号进行分组,详细说明如下表所示:
参数 | 说明 |
列名 | 日志字段名称或聚合函数计算结果列,支持单列或多列 |
别名 | 按照日志字段或聚合函数计算结果的别名进行分组 |
序号 | 某列在 SELECT 语句中的序号(从1开始)。 例如 status 列的序号为1,所以下面两个语句为等同关系。 * | SELECT status, count(*) AS PV GROUP BY status * | SELECT status, count(*) AS PV GROUP BY 1 |
聚合函数 |
语法示例
统计不同状态码的访问次数:
* | SELECT status, count(*) AS pv GROUP BY status
按照每分钟的时间粒度,计算 PV 随时间变化的趋势:
* |SELECTdate_trunc('minute',cast(__TIMESTAMP__ as timestamp)) AS dt,count(*) AS pvGROUP BYdtORDER BYdtLIMIT10
__TIMESTAMP__
字段为日志服务中的保留字段,表示时间列。dt
为 date_trunc('minute', cast(__TIMESTAMP__ as timestamp))
的别名,表示将时间截断到分钟粒度。date_trunc()
函数的更多信息,请参见 时间截断函数。说明
limit 10表示最多获取10行结果。如果不使用 LIMIT 语法,则默认获取100行结果。
在索引配置中,当您开启任意字段的统计功能后,日志服务会自动开启
__TIMESTAMP__
字段的统计功能。按照5分钟的时间粒度,计算 PV 及 UV 随时间变化的趋势:
因为
date_trunc()
函数只能按照固定时间间隔统计,可以使用 histogram 函数进行自定义时间间隔统计。* |SELECThistogram(cast(__TIMESTAMP__ as timestamp),interval 5 minute) as dt,count(*) as pv,count(distinct(remote_addr)) as uvGROUP BYdtORDER BYdt