Per definition behandlas ORDER BY efter gruppering med GROUP BY. Per definition är det konceptuella sättet som en SELECT-sats bearbetas på:
- Beräkna den kartesiska produkten av alla tabeller som refereras till i FROM-satsen
- Använd kopplingskriterierna från FROM-satsen för att filtrera resultaten
- Använd filterkriterierna i WHERE-satsen för att ytterligare filtrera resultaten
- Gruppera resultaten i delmängder baserat på GROUP BY-satsen, komprimera resultaten till en enda rad för varje sådan delmängd och beräkna värdena för alla aggregerade funktioner --
SUM()
,MAX()
,AVG()
, etc. -- för varje sådan delmängd. Observera att om ingen GROUP BY-sats anges, behandlas resultaten som om det finns en enda delmängd och eventuella aggregatfunktioner tillämpas på hela resultatuppsättningen och komprimerar den till en enda rad. - Filtrera de nu grupperade resultaten baserat på HAVING-satsen.
- Sortera resultaten baserat på ORDER BY-satsen.
De enda kolumner som tillåts i resultatuppsättningen för en SELECT med en GROUP BY-sats är naturligtvis
- Kolumnerna som refereras till i GROUP BY-satsen
- Aggregerade funktioner (som
MAX()
) - bokstavlig/konstanter
- uttryck härledda från något av ovanstående.
Endast trasiga SQL-implementeringar tillåter saker som select xxx,yyy,a,b,c FROM foo GROUP BY xxx,yyy
— hänvisningarna till kolumn a, b och c är meningslösa/odefinierade, med tanke på att de enskilda grupperna har komprimerats till en enda rad,