GROUP BY 分组后使用子查询
分组后可以在 SELECT 列表中使用子查询,子查询的返回值必须是单行单列(标量子查询)。子查询中可以查询其他表,也可以再次查询当前表。
SELECT name,
(SELECT TOP 1 age
FROM person p
WHERE p.name = per.name
AND p.id != per.id)
FROM person per
GROUP BY per.name, per.id
上面的示例中,按 name 和 id 分组后,通过子查询从 person 表中查找与当前分组同名的其他记录,返回其中一条的 age 值。子查询中 p.name = per.name 实现了与外部分组字段的关联,且通过 TOP 1 保证只返回一行一列。
注意:标量子查询如果返回多行或多列会报错,因此通常需要配合
TOP 1、MAX()、MIN()等聚合或限制手段使用。
Previous: 临时表
Next: 临时表的创建、使用与复杂查询拆分