Две версии функционально одинаковы. Что ж, второе синтаксически неверно, но я предполагаю, что вы имеете в виду:
select *
from (
select team, count(min) as count
from table
group by team
) t
where count > 500
(Вам нужен псевдоним для расчета, а несколько ведущих баз данных требуют псевдоним для подзапроса в предложении FROM
.)
Функциональная эквивалентность не означает, что они обязательно оптимизированы одинаково. Часто существует несколько способов написать запрос, которые функционально эквивалентны. Однако конкретный движок/оптимизатор базы данных может выбирать (и часто выбирает) разные пути оптимизации.
В этом случае запрос настолько прост, что трудно придумать несколько путей оптимизации. Для обеих версий движок в основном должен агрегировать запрос, а затем проверять второй столбец для фильтра. Я лично не вижу много вариаций на эту тему. Любой приличный механизм SQL должен использовать индексы, если это необходимо, либо в обоих случаях, либо ни в одном из них.
Итак, ответ на этот конкретный вопрос заключается в том, что в любой разумной базе данных они должны приводить к одному и тому же плану выполнения (т. е. к использованию индексов, пользователю параллелизма и выбору алгоритма агрегации). Однако функциональная эквивалентность не означает, что данное ядро базы данных будет создавать один и тот же план выполнения. Итак, общий ответ «нет».
person
Gordon Linoff
schedule
17.10.2012
count(min)
во втором запросе, иначеwhere count > 500
недействителен. Соответствующий вопрос здесь. Вас также может заинтересовать ИМЕТЬ грубую ошибку Время или желание, чтобы вы были ГДЕ - person Martin Smith   schedule 18.10.2012