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.