Розуміння послідовності, в якій слід розставляти пропозиції WHERE, GROUP BY і HAVING, допомагає створювати ефективні запити.
Пропозиція WHERE використовується для фільтрації рядків, отриманих в результаті операцій, які вказані в пропозиції FROM.
Пропозиція GROUP BY використовується для групування вихідних даних пропозиції WHERE.
Пропозиція HAVING використовується для фільтрації рядків сгруппированного результату.
Будь-яка умова пошуку, яке застосовується до або після операції групування, краще вказувати в реченні WHERE. Це зменшує кількість рядків, для яких виконується групування. Єдині умови пошуку, які слід вказувати в пропозиції HAVING, - це ті, які повинні застосовуватися після операції групування.
Оптимізатор запитів Microsoft SQL Server може працювати з більшою частиною таких умов. Якщо він визначив, що умова пошуку в пропозиції HAVING може застосовуватися перед операцією групування, він так і робить. Оптимізатор запитів може не розпізнати всі умови пошуку пропозиції HAVING, які можуть застосовуватися перед операцією групування. Рекомендується вказувати всі такі умови пошуку в реченні WHERE, а не в пропозиції HAVING.
У наступному прикладі показано пропозицію HAVING з агрегатної функцією. У ньому рядки з таблиці SalesOrderDetail групуються за кодом продукту, а потім видаляються продукти, середня кількість замовлень на які менше п'яти.