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

Forespørgsel med GROUP BY og ORDER BY virker ikke, når der er valgt flere kolonner i SELECT

Du skal være forsigtig, når du bruger GROUP BY . Når du forstår, hvad GROUP BY gør, vil du selv kende problemet. Den foretager en aggregering på dine data, eller med andre ord, den reducerer dine data ved at udføre en eller anden handling på de rå poster og skabe et nyt reduceret antal poster, som en eller anden aggregeringsfunktion er blevet anvendt på (SUM, COUNT, AVG osv.)

De felter, du angiver i GROUP BY klausul repræsenterer niveauet af aggregering/oprulning, du går efter.

SELECT col2, col3 FROM tbl WHERE col1 IS NULL GROUP BY col1 ORDER BY col1

Her forsøger du at lave aggregeringen ved col1 niveau, hvilket betyder, at for hver enkelt værdi, der findes i kolonne col1 , vil der blive udført en operation på nogle andre kolonner, du angiver i SELECT klausul(her col2 ,col3 ), så du i outputtet har ikke-gentagende værdier i col1 og nogle oprullede værdier af col2 og col3 mod hver enkelt col1 værdi baseret på hvilken funktion du anvender (SUM, COUNT, AVG osv.).

Hvordan anvender du denne funktion? Det er det, der mangler i din ovenstående forespørgsel. For at løse det skal du anvende en eller anden aggregeringsfunktion på de felter, der er til stede i SELECT klausul, men ikke i GROUP BY klausul. Tag et eksempel på SUM, prøv dette:

SELECT SUM(col2), SUM(col3) FROM tbl WHERE col1 IS NULL GROUP BY col1 ORDER BY col1

ELLER for en bedre idé, fjern WHERE filter og kontroller outputtet ved at køre:

SELECT col1, SUM(col2), SUM(col3) FROM tbl GROUP BY col1 ORDER BY col1

Derudover grunden til, at din anden forespørgsel

SELECT col2 FROM tbl WHERE col1 IS NULL GROUP BY col2 ORDER BY col2

fungerede, fordi du ikke behøver anvende aggregering på feltet (her col2 ), som er til stede i GROUP BY klausul.



  1. Postgis installation:type geometri eksisterer ikke

  2. Sådan SKÆRES data fra tabeller på postgres

  3. PostgreSQL belastningsbalancering ved hjælp af HAProxy &Keepalved

  4. mysqldb på python 2.6+ (win32)