GROUP BY 分组后使用子查询

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() 等聚合或限制手段使用。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注