когда агрегатные функции выполняются в sql (например, sum (), max () и т. д.) - PullRequest
0 голосов
/ 11 сентября 2018

Согласно моему предложению group by by выполняется перед оператором select.

Итак, если у нас есть функция sum () в операторе select, когда эта функция точно выполняется?

например, в следующем запросе

select c1,sum(c2)
from table
group by c1;

выполняется ли сумма (c2), когда происходит группировка? Если да, то как он узнает, что он должен выполнять sum (), а не что-либо еще, потому что group by происходит перед предложением select. Или это что-то еще?

Спасибо!

1 Ответ

0 голосов
/ 11 сентября 2018

В соответствии с моим предложением group by by выполняется перед оператором select.

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

A SELECT оператор описывает набор результатов. Движок SQL может создавать набор результатов любым удобным для него способом. Обычно он состоит из двух этапов: этапа компиляции и этапа оптимизации. Интерпретация идентификаторов находится на этапе компиляции.

То, что на самом деле выполняется, обычно представляет собой ориентированный ациклический граф (DAG) операций Запрос компилируется в эту структуру. Большинство баз данных поддерживают метод просмотра того, что действительно выполняется, обычно с помощью метода explain. Группа обеспечения доступности баз данных может переставлять операции и даже исключать некоторые (если они не нужны).

...