По дефиниция ORDER BY се обработваслед групиране с GROUP BY. По дефиниция концептуалният начин, по който всеки оператор SELECT се обработва е:
- Изчислете декартовото произведение на всички таблици, посочени в клаузата FROM
- Приложете критериите за присъединяване от клаузата FROM, за да филтрирате резултатите
- Приложете критериите за филтриране в клаузата WHERE, за да филтрирате допълнително резултатите
- Групирайте резултатите в подмножества въз основа на клаузата GROUP BY, свивайки резултатите до един ред за всяко такова подмножество и изчислявайки стойностите на всички агрегатни функции --
SUM()
,MAX()
,AVG()
и т.н. -- за всяко такова подмножество. Имайте предвид, че ако не е посочена клауза GROUP BY, резултатите се третират така, сякаш има едно подмножество и всички агрегатни функции се прилагат към целия набор от резултати, свивайки го до един ред. - Филтрирайте сега групираните резултати въз основа на клаузата HAVING.
- Сортирайте резултатите въз основа на клаузата ORDER BY.
Единствените разрешени колони в набора от резултати на SELECT с клауза GROUP BY са, разбира се,
- Колоните, посочени в клаузата GROUP BY
- Агрегиращи функции (като
MAX()
) - литерал/константи
- изрази, получени от някое от горните.
Само неработещи SQL реализации позволяват неща като select xxx,yyy,a,b,c FROM foo GROUP BY xxx,yyy
— препратките към колони a, b и c са безсмислени/недефинирани, като се има предвид, че отделните групи са свити до един ред,