sql >> Database >  >> RDS >> Mysql

Query met GROUP BY en ORDER BY werkt niet wanneer meerdere kolommen in SELECT zijn gekozen

Je moet voorzichtig zijn wanneer je GROUP BY . gebruikt . Als je eenmaal begrijpt wat GROUP BY doet, zult u het probleem zelf kennen. Het doet een aggregatie van uw gegevens of met andere woorden, het reduceert uw gegevens door een bewerking uit te voeren op de onbewerkte items en een nieuw verminderd aantal items te creëren waarop een aggregatiefunctie is toegepast (SUM, COUNT, AVG, etc.)

De velden die u opgeeft in de GROUP BY clausule vertegenwoordigt het niveau van aggregatie/roll-up waar u voor gaat.

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

Hier probeert u de aggregatie uit te voeren op col1 niveau, wat betekent dat voor elke afzonderlijke waarde in kolom col1 , zal er een bewerking worden uitgevoerd op enkele andere kolommen die u opgeeft in SELECT clausule (hier col2 ,col3 ) zodat je in de uitvoer niet-herhalende waarden hebt in col1 en enkele opgerolde waarden van col2 en col3 tegen elke afzonderlijke col1 waarde op basis van welke functie u toepast (SUM, COUNT, AVG, etc.).

Hoe pas je deze functie toe? Dat is wat ontbreekt in uw bovenstaande vraag. Om het op te lossen, moet u een aggregatiefunctie toepassen op de velden die aanwezig zijn in de SELECT clausule maar niet in GROUP BY clausule. Neem een ​​voorbeeld van SUM en probeer dit:

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

OF voor een beter idee, het verwijderen van WHERE filter en controleer de uitvoer door het volgende uit te voeren:

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

Bovendien, de reden waarom uw andere vraag

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

werkte, is omdat u geen aggregatie op het veld hoeft toe te passen (hier col2 ) die aanwezig is in de GROUP BY clausule.



  1. MySQL-gegevens bevatten speciale tekens zoals š en ć, maar worden weergegeven als '?' op de webpagina. Waarom?

  2. MySQL met een andere index, afhankelijk van de limietwaarde met ORDER BY-query

  3. INFORMATION_SCHEMA versus sysobjects

  4. Zoek het aantal kolommen in een tabel