Sie müssen vorsichtig sein, wenn Sie GROUP BY
verwenden . Sobald Sie verstanden haben, was GROUP BY
ist tut, wirst du das Problem selbst kennen. Es führt eine Aggregation Ihrer Daten durch oder mit anderen Worten, es reduziert Ihre Daten, indem es einige Operationen an den Roheinträgen durchführt und eine neue reduzierte Anzahl von Einträgen erstellt, auf die eine Aggregationsfunktion angewendet wurde (SUM, COUNT, AVG usw.)
Die Felder, die Sie in GROUP BY
bereitstellen -Klausel stellt die Aggregations-/Rollup-Ebene dar, die Sie anstreben.
SELECT col2, col3 FROM tbl WHERE col1 IS NULL GROUP BY col1 ORDER BY col1
Hier versuchen Sie, die Aggregation bei col1
durchzuführen Ebene, d. h. für jeden eindeutigen Wert in Spalte col1
, werden einige Operationen an einigen anderen Spalten durchgeführt, die Sie in SELECT
angeben Klausel (hier col2
,col3
), sodass Sie in der Ausgabe sich nicht wiederholende Werte in col1
haben und einige zusammengefasste Werte von col2
und col3
gegen jeden einzelnen col1
Wert basierend auf der Funktion, die Sie anwenden (SUM, COUNT, AVG usw.).
Wie wenden Sie diese Funktion an? Das fehlt in Ihrer obigen Abfrage. Um es zu lösen, müssen Sie eine Aggregationsfunktion auf die Felder anwenden, die in SELECT
vorhanden sind -Klausel, aber nicht in GROUP BY
Klausel. Nehmen Sie ein Beispiel für SUM und versuchen Sie Folgendes:
SELECT SUM(col2), SUM(col3) FROM tbl WHERE col1 IS NULL GROUP BY col1 ORDER BY col1
ODER für eine bessere Idee, entfernen Sie WHERE
filtern und die Ausgabe überprüfen, indem Sie Folgendes ausführen:
SELECT col1, SUM(col2), SUM(col3) FROM tbl GROUP BY col1 ORDER BY col1
Außerdem den Grund für Ihre andere Anfrage
SELECT col2 FROM tbl WHERE col1 IS NULL GROUP BY col2 ORDER BY col2
funktioniert, weil Sie keine Aggregation auf das Feld anwenden müssen (hier col2
), die in GROUP BY
vorhanden ist Klausel.