select 语句中的相关子查询与 group by
Correlated subquery in a select statement with group by
我有一个带分组依据的 select 查询,select 列表中有一个相关的子查询。此查询returns 正确结果。我的问题是这个查询是如何工作的。子查询不应该是 group by list 的一部分吗?有人可以解释一下它背后的机制吗?谢谢!
Select a.column1
,Max(a.column2) 'MaxValue'
,Min(a.column2) 'MinValue'
,(Select top 1 Column c
From table A a_s
Where a_s.column1 = a.column1
and a_s.ver <> 0
) 'ColumnCValue'
From tableA a
Group by a.column1
没有必要。这是相关子查询:
(Select top 1 Column c
From table A a_s
Where a_s.column1 = a.column1 and
-------^
a_s.ver <> 0
)
关键是关联子句使用了a.column1
。该列是聚合列。实际上,相关子查询是运行 聚合后,所以它只能使用聚合后可用的列和表达式。而你在这么做,所以你的表情没问题。
我有一个带分组依据的 select 查询,select 列表中有一个相关的子查询。此查询returns 正确结果。我的问题是这个查询是如何工作的。子查询不应该是 group by list 的一部分吗?有人可以解释一下它背后的机制吗?谢谢!
Select a.column1
,Max(a.column2) 'MaxValue'
,Min(a.column2) 'MinValue'
,(Select top 1 Column c
From table A a_s
Where a_s.column1 = a.column1
and a_s.ver <> 0
) 'ColumnCValue'
From tableA a
Group by a.column1
没有必要。这是相关子查询:
(Select top 1 Column c
From table A a_s
Where a_s.column1 = a.column1 and
-------^
a_s.ver <> 0
)
关键是关联子句使用了a.column1
。该列是聚合列。实际上,相关子查询是运行 聚合后,所以它只能使用聚合后可用的列和表达式。而你在这么做,所以你的表情没问题。