假设我们有一个Orders包含列的表order_id, total, discount
然后我们写一个类似于下面的查询
SELECT
COUNT(order_id) AS num_orders
, SUM(total) / COUNT(order_id) as avg_total
, SUM(discount) / COUNT(order_id) AS avg_discount
FROM Orders
Run Code Online (Sandbox Code Playgroud)
COUNT(order_id)Preserved的值是跨列还是重新计算(例如,是否有性能影响)?或者最好先确定计算值并在查询中使用这些值,例如:
DECLARE @order_count AS INT
SELECT
@order_count = COUNT(order_id)
FROM Orders
SELECT
@order_count AS num_orders
, SUM(total) / @order_count as avg_total
, SUM(discount) / @order_count AS avg_discount
FROM Orders
Run Code Online (Sandbox Code Playgroud)
请注意,在编写此问题时,我注意到由于AVG()支持SQL Server 2008 。但是,我继续了这个问题,并打算更一般地想了解 SQL Server 如何处理跨列的相同聚合,因为我有时会以其他形式遇到这个问题。