日志服务 GROUP BY 语法

GROUP BY 语法用于结合 聚合函数,根据一个或多个列对分析结果进行分组统计。

相关产品
日志服务 产品页,含版本规格、价格与购买入口。

一、语法格式

* | 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
聚合函数 GROUP BY 语法常与 MIN、MAX、AVG、SUM、COUNT 等聚合函数搭配使用,更多信息请参见 聚合函数。

二、语法示例

·统计不同状态码的访问次数:

* | SELECT status, count(*) AS pv GROUP BY status

·按照每分钟的时间粒度,计算 PV 随时间变化的趋势:

* | SELECT date_trunc( 'minute', cast(__TIMESTAMP__ as timestamp) ) AS dt, count(*) AS pv GROUP BY dt ORDER BY dt LIMIT 10

__TIMESTAMP__字段为日志服务中的保留字段,表示时间列。dt 为 date_trunc('minute', cast(__TIMESTAMP__ as timestamp)) 的别名,表示将时间截断到分钟粒度。date_trunc() 函数的更多信息,请参见 时间截断函数。

·按照5分钟的时间粒度,计算 PV 及 UV 随时间变化的趋势:
因为date_trunc()函数只能按照固定时间间隔统计,可以使用 histogram 函数进行自定义时间间隔统计。

* | SELECT histogram( cast(__TIMESTAMP__ as timestamp), interval 5 minute ) as dt, count(*) as pv, count( distinct(remote_addr) ) as uv GROUP BY dt ORDER BY dt

赞 (0)
上一篇 4天前
下一篇 4天前