SQL-запрос, последовательность выполнения - PullRequest
2 голосов
/ 21 сентября 2009

Какой будет последовательность выполнения, за которой следует SQL, если в запросе есть как group by, так и order by предложение. Зависит ли это от их позиции в запросе ???

Ответы [ 8 ]

6 голосов
/ 21 сентября 2009

ORDER BY всегда выполняется по результатам группировки, выполненной GROUP BY, то есть всегда «после». В стандартном SQL вы должны иметь ORDER BY лексически после GROUP BY, если оба присутствуют, чтобы «напомнить вам» о факте.

4 голосов
/ 21 сентября 2009

по порядку:

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

1 голос
/ 21 сентября 2009

Последовательность выполнения не предписывается никаким оператором SQL. Обязательным является то, чтобы результат соответствовал результату, который был бы получен путем «канонической» оценки. В канонической оценке ORDER BY применяется последним (даже после оценки выражений списка SELECT), но это не означает, что сортировка откладывается до этой точки при фактическом выполнении запроса в реальной системе.

1 голос
/ 21 сентября 2009

Заказ по обычно происходит последним.

Если вы используете SQL Server, запустите анализатор запросов и план выполнения , чтобы получить хорошее графическое представление вашего запроса.

1 голос
/ 21 сентября 2009

Это зависит от многих вещей, включая RDMS, которую вы используете. Лучший способ выяснить, что происходит, - использовать инструмент запросов, позволяющий увидеть план выполнения запроса.

0 голосов
/ 01 февраля 2016

Я также предлагаю использовать анализатор запросов для конкретной базы данных. Ниже приведен пример в Postgres, который объясняет, что сначала выполняется ORDER BY, а затем фильтр WHERE:

EXPLAIN
SELECT * FROM table WHERE id=x AND date<='yyyy-mm-dd' ORDER BY date DESC;

Так что, если я изменю DESC на ASC, набор результатов будет содержать разные записи!

0 голосов
/ 02 июня 2015

Предположим, у нас есть SQL-запрос:

SELECT   ...
  FROM     ...
  WHERE    ...
  GROUP BY ...
  HAVING   ...
  ORDER BY ...

порядок выполнения подпунктов SQL-запроса:

 1. FROM clause
 2. WHERE clause
 3. GROUP BY clause
 4. HAVING clause
 5. SELECT clause
 6. ORDER BY clause
0 голосов
/ 21 сентября 2009
Сначала выполняется

group by, а затем упорядочиваются результаты группы.

...