Предпочтительный синтаксис для сложения сумм SQL - PullRequest
1 голос
/ 03 августа 2010

Я хочу вернуть общий объем продаж. То есть UnitPrice + TaxAmount для всего набора данных. Я могу написать SQL-запрос двумя разными способами с одним и тем же результатом.

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

или

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

Является ли один из этих запросов более предпочтительным, чем другой (производительность или нет)? Или это просто вопрос вкуса?

Ответы [ 5 ]

9 голосов
/ 03 августа 2010

Использование:

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

... потому что использование SUM(UnitPrice + TaxAmount) может вернуть NULL, если более одного из значений равно NULL.Вы можете обернуть их в COALESCE:

SELECT SUM(COALESCE(UnitPrice, 0) + COALESCE(TaxAmount, 0))

Обновление

Я не вижу разницы в производительности между этими двумя методами, и вижу, что SUM () + SUM () более NULL безопаснопросто заключил сделку со мной.

2 голосов
/ 03 августа 2010

Первый из них будет работать лучше (в любом случае в SQL Server), вы хотите сделать наименьшее количество возможных сумм, так как это относительно дорогая операция.

е: я понимаю, что нули могут повлиять на это, но, учитывая, что вопрос гласит

Я могу написать SQL-запрос два разные способы с одинаковым результатом вернулся.

Я предполагаю, что у него нет нуля, с которым нужно бороться.

е. Несмотря на утверждения моего сталкера в комментариях ниже, вы можете легко проверить разницу в производительности для себя, используя sql trace.

0 голосов
/ 03 августа 2010

Так как вы не указали БД, я не знаю, кто может сказать, что работает лучше.Тем не менее, если бы я был автором DB Engine, я бы, вероятно, попытался заставить их быть достаточно близкими в совершенстве, но вы должны проверить и посмотреть.

Что касается читабельности, я почти так же чувствую себя как OMG Ponies SUM (UnitPrice) + SUM (TaxAmount) AS 'TotalSales'

0 голосов
/ 03 августа 2010

Я бы пошел с первым запросом, поэтому, если вы когда-нибудь перейдете от уже рассчитанного TaxAmount к необходимости умножать UnitPrice на TaxRate, ваш запрос не сильно изменится. Я также думаю, что с первым запросом производительность будет лучше.

0 голосов
/ 03 августа 2010

Я не знаю, с точки зрения производительности, но я ожидаю, что SUM(UnitPrice + TaxAmount), вероятно, немного лучше там.

С точки зрения читабельности, я считаю, что первое предпочтительнее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...