Podle definice se ORDER BY zpracovává po seskupení pomocí GROUP BY. Podle definice je koncepční způsob zpracování jakéhokoli příkazu SELECT:
- Vypočítejte kartézský součin všech tabulek, na které odkazuje klauzule FROM
- K filtrování výsledků použijte kritéria spojení z klauzule FROM
- Použijte kritéria filtru v klauzuli WHERE k dalšímu filtrování výsledků
- Seskupit výsledky do podmnožin na základě klauzule GROUP BY, sbalit výsledky do jednoho řádku pro každou takovou podmnožinu a vypočítat hodnoty všech agregačních funkcí --
SUM()
,MAX()
,AVG()
atd. -- pro každou takovou podmnožinu. Všimněte si, že pokud není zadána žádná klauzule GROUP BY, s výsledky se zachází, jako by existovala jediná podmnožina a veškeré agregační funkce se použijí na celou sadu výsledků a sbalí ji do jednoho řádku. - Filtrujte nyní seskupené výsledky na základě klauzule HAVING.
- Seřaďte výsledky na základě klauzule ORDER BY.
Jediné povolené sloupce ve výsledkové sadě SELECT s klauzulí GROUP BY jsou samozřejmě
- Sloupce, na které odkazuje klauzule GROUP BY
- Agregační funkce (např.
MAX()
) - doslova/konstanty
- výrazy odvozené z kterékoli z výše uvedených možností.
Pouze nefunkční implementace SQL umožňují věci jako select xxx,yyy,a,b,c FROM foo GROUP BY xxx,yyy
— odkazy na sloupce a, b a c jsou bezvýznamné/nedefinované, vzhledem k tomu, že jednotlivé skupiny byly sbaleny do jednoho řádku,