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.