小编Dav*_*rer的帖子

跨列复制时,SQL Server 缓存是否聚合结果?

假设我们有一个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 如何处理跨列的相同聚合,因为我有时会以其他形式遇到这个问题。

sql-server sql-server-2012

6
推荐指数
1
解决办法
506
查看次数

标签 统计

sql-server ×1

sql-server-2012 ×1