Какова последовательность выполнения предложения Group By, Have и Where в SQL Server? - PullRequest
77 голосов
/ 15 июля 2009

Я просто запутался в последовательности выполнения SQL-запроса, когда мы используем GROUP BY и HAVING с предложением WHERE. Какой из них исполняется первым? Какова последовательность?

Ответы [ 9 ]

158 голосов
/ 15 июля 2009

по порядку:

ОТ & СОЕДИНЕНИЕ s определение и фильтрация строк
ГДЕ больше фильтров в строках
GROUP BY объединяет эти строки в группы
HAVING фильтры групп
ORDER BY упорядочивает оставшиеся строки / группы
LIMIT фильтры на оставшиеся строки / группы

7 голосов
/ 15 июля 2009

ГДЕ сначала, затем вы группируете результат запроса, и последнее, но не менее важное HAVING-предложение берется для фильтрации сгруппированного результата. Это «логичный» порядок, я не знаю, как это технически реализовано в движке.

6 голосов
/ 06 ноября 2017

Вот полная последовательность действий для сервера sql:

1.  FROM
2.  ON
3.  JOIN
4.  WHERE
5.  GROUP BY
6.  WITH CUBE or WITH ROLLUP
7.  HAVING
8.  SELECT
9.  DISTINCT
10. ORDER BY
11. TOP

Таким образом, из приведенного выше списка вы можете легко понять последовательность выполнения GROUP BY, HAVING and WHERE, которая:

1.  WHERE
2.  GROUP BY
3.  HAVING

Получите дополнительную информацию об этом от Microsoft

2 голосов
/ 15 июля 2009

Я думаю, что это реализовано в движке, как сказал Матиас: ГДЕ, ГРУППА BY, HAVING

Пытался найти в сети ссылку, которая перечисляет всю последовательность (т. Е. "SELECT" идет внизу), но я не могу ее найти. Это было подробно описано в книге «Внутри Microsoft SQL Server 2005», которую я недавно читал в Solid Quality Learning

Редактировать: Найдена ссылка: http://blogs.x2line.com/al/archive/2007/06/30/3187.aspx

1 голос
/ 06 ноября 2017

В Oracle 12c вы можете запустить код в любой из следующих последовательностей:

Where
Group By
Having

Или

Where 
Having
Group by
1 голос
/ 24 мая 2017

В нижеуказанном порядке

  1. ОТ & СОЕДИНЕНИЕ
  2. WHERE
  3. GROUP BY
  4. HAVING
  5. SELECT
  6. ЗАКАЗАТЬ ПО
  7. LIMIT
1 голос
/ 15 июля 2009

Подумайте, что вам нужно сделать, если вы хотите реализовать:

  • ГДЕ : необходимо выполнить операции JOIN.
  • GROUP BY : Вы указываете Группировать по, чтобы «сгруппировать» результаты в соединении, а затем после операции JOIN после использования WHERE.
  • HAVING : HAVING предназначен для фильтрации, как говорится в выражениях GROUP BY. Затем он выполняется после GROUP BY.

Порядок ГДЕ, ГРУППЫ ПО И ОБЛАСТИ.

0 голосов
/ 07 декабря 2018

Наличие пункта может предшествовать / предшествовать группе по пункту.

Пример: выберите * FROM test_std; ROLL_NO SNAME DOB TEACH


     1 John       27-AUG-18 Wills     
     2 Knit       27-AUG-18 Prestion  
     3 Perl       27-AUG-18 Wills     
     4 Ohrm       27-AUG-18 Woods     
     5 Smith      27-AUG-18 Charmy    
     6 Jony       27-AUG-18 Wills     
       Warner     20-NOV-18 Wills     
       Marsh      12-NOV-18 Langer    
       FINCH      18-OCT-18 Langer    

9 выбранных строк.

выберите учить, считать () считать из test_std имеющий количество ()> 1 группа по TEACH;

УЧИТЬ СЧЕТ


Лангер 2 Wills 4

0 голосов
/ 22 декабря 2010

SELECT
ОТ
JOIN и
ГДЕ
ГРУППА ПО
HAVING
ЗАКАЗАТЬ ПО

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