我想要退回总销售额。也就是说整个数据集的UnitPrice + TaxAmount。我可以用两种不同的方式编写SQL查询,返回相同的结果。
SELECT SUM(UnitPrice + TaxAmount) AS 'TotalSales' FROM Sales
或
SELECT SUM(UnitPrice) + SUM(TaxAmount) AS 'TotalSales' FROM Sales
其中一个查询是否可以在另一个上执行(性能或其他方面)?或者这仅仅是品味问题?
答案 0 :(得分:9)
使用:
SELECT SUM(UnitPrice) + SUM(TaxAmount) AS 'TotalSales'
FROM Sales
...因为如果多个值为NULL,则使用SUM(UnitPrice + TaxAmount)
可以返回NULL
。你可以把它们包裹在COALESCE中:
SELECT SUM(COALESCE(UnitPrice, 0) + COALESCE(TaxAmount, 0))
我没有看到这两种方法之间存在性能差异,并且看到SUM()+ SUM()更加安全,只是将这笔交易封存给我。
答案 1 :(得分:2)
第一个会表现得更好(无论如何在SQL Server中),你想要尽可能少的SUM,因为这是一个相对昂贵的操作。
e:我意识到空值可以影响这个,但考虑到问题陈述
我可以写两个SQL查询 具有相同结果的不同方式 返回。
我假设他没有空位可以抗衡。
即尽管我在下面的评论中使用了跟踪者的断言,但您可以使用sql trace轻松验证自己的性能差异。
答案 2 :(得分:0)
我不了解性能,但我希望SUM(UnitPrice + TaxAmount)
在那里可能会略微好一些。
从可读性的角度来看,我认为第一个是可取的。
答案 3 :(得分:0)
我会选择第一个查询,如果您从已经计算过的TaxAmount变为需要将UnitPrice乘以TaxRate,您的查询将不会发生太大变化。我还认为第一次查询时性能会更好。
答案 4 :(得分:0)
由于您没有指定数据库,我不知道谁能说哪个性能更好。也就是说,如果我是数据库引擎作家,我可能会尝试让它们在性能上非常接近,但你应该测试一下。
至于可读性,我觉得和OMG小马一样 SUM(UnitPrice)+ SUM(TaxAmount)AS'TotalSales'