将SQL SUM一起添加的首选语法

时间:2010-08-03 19:12:39

标签: sql database aggregate-functions

我想要退回总销售额。也就是说整个数据集的UnitPrice + TaxAmount。我可以用两种不同的方式编写SQL查询,返回相同的结果。

SELECT SUM(UnitPrice + TaxAmount) AS 'TotalSales' FROM Sales

SELECT SUM(UnitPrice) + SUM(TaxAmount) AS 'TotalSales' FROM Sales

其中一个查询是否可以在另一个上执行(性能或其他方面)?或者这仅仅是品味问题?

5 个答案:

答案 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'