Per definition behandles ORDER BY efter gruppering med GROUP BY. Per definition er den konceptuelle måde, enhver SELECT-sætning behandles på:
- Beregn det kartesiske produkt af alle tabeller, der henvises til i FROM-sætningen
- Anvend joinkriterierne fra FROM-sætningen for at filtrere resultaterne
- Anvend filterkriterierne i WHERE-sætningen for yderligere at filtrere resultaterne
- Gruppér resultaterne i undersæt baseret på GROUP BY-klausulen, komprimer resultaterne til en enkelt række for hver sådan undergruppe, og beregn værdierne af eventuelle aggregerede funktioner --
SUM()
,MAX()
,AVG()
osv. -- for hver sådan delmængde. Bemærk, at hvis der ikke er angivet en GROUP BY-klausul, behandles resultaterne, som om der er et enkelt undersæt, og alle aggregerede funktioner gælder for hele resultatsættet, idet det skjules til en enkelt række. - Filtrer de nu grupperede resultater baseret på HAVING-sætningen.
- Sortér resultaterne baseret på ORDER BY-sætningen.
De eneste kolonner, der er tilladt i resultatsættet af en SELECT med en GROUP BY-sætning, er naturligvis
- Kolonnerne, der henvises til i GROUP BY-sætningen
- Aggregerede funktioner (såsom
MAX()
) - bogstaveligt/konstanter
- udtryk afledt af et af ovenstående.
Kun ødelagte SQL-implementeringer tillader ting som select xxx,yyy,a,b,c FROM foo GROUP BY xxx,yyy
— referencerne til kolonne a, b og c er meningsløse/udefinerede, da de individuelle grupper er blevet foldet sammen til en enkelt række,