SQL 最佳实践 - 在 SELECT 内更新或计算

SQL Best Practice - UPDATE or calc within SELECT

我在创建这个 post 时得到了一个标志,它可能由于主观而被关闭,所以我希望我没有在这里违反任何规则......但是这里是:

我有一个执行平均价格计算的 SQL 查询(SQL Server 2014),想知道以下哪项是最佳做法。

选项 1:

CREATE TABLE #Test
(
ItemCount INT
,ItemTotal MONEY
,AvgPrice MONEY
)

INSERT #Test
SELECT
COUNT(Item)
,SUM(ItemPrice)
,0
FROM [table]

UPDATE #Test
SET AvgPrice = ItemTotal/ItemCount

选项 2:

CREATE TABLE #Test
(
ItemCount INT
,ItemTotal MONEY
,AvgPrice MONEY
)

INSERT #Test
SELECT
COUNT(Item)
,SUM(ItemPrice)
,CAST(SUM(ItemPrice) AS FLOAT)/CAST(COUNT(Item) AS FLOAT)
FROM [table]

根据当前 [table] 中的数据,这两个 运行 在相同的时间内得到相同的结果,但当 [table] 得到时,哪个更好大很多?

可能是第二个 - 因为它不需要第二个 运行 通过 table。一旦它足够大,这很重要。情况可能永远不会如此(一百万行的差异应该可以忽略不计)。

在这两种情况下,您的临时 table 将只有一行(因为您插入的是没有显式分组的聚合函数的结果)。更新包含单行的 table 所需的时间长度通常是难以察觉的 - 因此这两种方法实际上可能总是花费相同的时间长度。