sql >> Databasteknik >  >> RDS >> Mysql

Ge prioritet till ORDER BY över en GROUP BY i MySQL utan underfråga

Per definition behandlas ORDER BY efter gruppering med GROUP BY. Per definition är det konceptuella sättet som en SELECT-sats bearbetas på:

  1. Beräkna den kartesiska produkten av alla tabeller som refereras till i FROM-satsen
  2. Använd kopplingskriterierna från FROM-satsen för att filtrera resultaten
  3. Använd filterkriterierna i WHERE-satsen för att ytterligare filtrera resultaten
  4. 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.
  5. Filtrera de nu grupperade resultaten baserat på HAVING-satsen.
  6. 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,



  1. Återställer åtkomst till förlorat MySQL-lösenord för PHPMyAdmin på WAMP

  2. Hur kan jag importera data från ASCII (ISO/IEC 8859-1) till min Rails/PGSQL-databas?

  3. Offset MySQL utan begränsning

  4. Hur man lagrar LocalTime i viloläge