sql >> Database teknologi >  >> RDS >> Mysql

Giv prioritet til ORDER BY over en GROUP BY i MySQL uden underforespørgsel

Per definition behandles ORDER BY efter gruppering med GROUP BY. Per definition er den konceptuelle måde, enhver SELECT-sætning behandles på:

  1. Beregn det kartesiske produkt af alle tabeller, der henvises til i FROM-sætningen
  2. Anvend joinkriterierne fra FROM-sætningen for at filtrere resultaterne
  3. Anvend filterkriterierne i WHERE-sætningen for yderligere at filtrere resultaterne
  4. 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.
  5. Filtrer de nu grupperede resultater baseret på HAVING-sætningen.
  6. 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,



  1. ActiveRecord::StatementInvalid:Mysql2::Fejl:Kan ikke slette eller opdatere en overordnet række - Rails 4.2.6

  2. Spring over eller ignorer definerere i Mysqldump

  3. få værdier fra tabellen kun for en bestemt dag i mysql

  4. Hvordan laver man en simpel fuzzy søgning kun med PostgreSQL?