You need to enable JavaScript to run this app.
导航

嵌套子查询

最近更新时间2024.01.22 17:33:41

首次发布时间2022.12.09 14:20:11

嵌套子查询指将一个 SELECT 语句嵌套在另一个 SELECT 语句中,表示先对原始数据进行 SELECT 统计分析,再基于分析结果进行二次统计分析,适用于相对复杂的分析场景。

使用限制

限制项

说明

SDK 日志检索

通过日志服务 SDK 使用嵌套子查询语法时,不支持日志检索,即不支持在检索结果的基础上进行分析。 检索分析语句中,|前面的过滤条件必须指定为*,例如* | SELECT key FROM (sub_query),不支持 404 | SELECT key FROM (sub_query)
通过控制台使用嵌套子查询语法时,无此限制。

SQL 语句 limit

嵌套子查询中,外层主句 limit 最大值为1000, 默认值是 100;子句的 limit 最大值为 10000,默认是 10000。

语法格式

对于 key 以下划线开头或者结尾的字段,需要加反引号(``)使用。例如 __time___idtest_ 等字段,在嵌套子查询语法中需要被反引号包裹,例如:

* | SELECT min(PV) FROM ( SELECT count(*) as PV GROUP BY `__request_method__` )

运算符

  • 运算符两侧需要添加空格,例如 *|select a + b,而不是 *|select a+b,后者中的a+b会被当作字符串处理。
  • 需要使用英文括号(())定义运算的优先级。在乘除和加减运算符同时存在的场景下,默认按照从前至后的顺序进行计算,除非已通过英文括号定义优先级。例如 1 + 2 * 3 结果为 9,1 + (2 * 3) 结果为 7。

语法格式

嵌套子查询的语法格式如下:

* | SELECT key FROM (sub_query)

在嵌套子查询中,SELECT 语句中需要指定 FROM 子句。

说明

  • 日志服务嵌套子查询语法支持 SELECT 语句的多层嵌套,不局限于两层。
  • 在子查询语句中,无需指定关键字FROM,默认分析本日志主题中的数据。
  • 子查询语句需被包裹在半角圆括号()中。

参数说明:

参数

说明

key

需要从子查询中获取哪些字段进行二次统计分析。

subquery

子查询语句,需被包裹在括号中。

语法示例

示例 SQL 语句
根据访问日志统计各个版本客户端的用户数,SQL 语句示例如下:

* | SELECT Client,count(*) AS UserNum 
FROM (SELECT Client,account_id GROUP BY Client,account_id) 
GROUP BY Client 
ORDER BY Client

语句说明

  • 第一层语句中,SELECT Client,account_id GROUP BY Client,account_id 表示按照 Client 和 account_id 分组去重。
  • 第二层语句中,SELECT Client,count(*) AS UserNum FROM表示对第一层语句的结果再做分组统计,获取各个客户端版本的用户数统计值。

查询分析结果

Client

UserNum

version_1.0

300

version_1.1

500

version_1.2

200