Псевдоним, Группировка, Имея
Я очень плохо знаком с 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 ответ
Между запросами нет существенной разницы. Они должны возвращать точно такой же набор результатов и иметь одинаковый или практически одинаковый план выполнения.
Один вопрос, является ли или нет sum(words)
оценивается один или два раза. Это, вероятно, зависит от базы данных. Однако оптимизатору нетрудно понять, что выражение следует вычислять только один раз. Даже если он рассчитывается дважды, sum()
очень дешево по сравнению с работой, необходимой для group by
,