Псевдоним, Группировка, Имея - PullRequest
0 голосов
/ 03 октября 2018

Я очень плохо знаком с SQL.Будет ли кто-нибудь так любезно объяснить, есть ли разница между этими двумя запросами?

SELECT author, sum(words) AS total_words
FROM books
GROUP BY author 
HAVING sum(words) > 10000000;

SELECT author, sum(words) AS total_words 
FROM books
GROUP BY author 
HAVING total_words > 10000000;

1 Ответ

0 голосов
/ 03 октября 2018

Между запросами нет существенной разницы.Они должны возвращать точно такой же набор результатов и иметь одинаковый или практически одинаковый план выполнения.

Один вопрос заключается в том, оценивается ли sum(words) один или два раза.Это, вероятно, зависит от базы данных.Однако оптимизатору нетрудно понять, что выражение следует вычислять только один раз.Даже если он рассчитан дважды, sum() очень дешево по сравнению с работой, необходимой для group by.

...