SQL-Fehler: Spalte muss in einer GROUP BY-Klausel erscheinen oder als Aggregatfunktion verwendet werden
Beim Ausführen einer gruppierten Aggregationsabfrage müssen Sie sicherstellen, dass die ausgewählten Spalten entweder in der GROUP BY
-Klausel erscheinen oder an der Berechnung der Aggregatfunktion beteiligt sind. Andernfalls wird eine Fehlermeldung ähnlich der „Spalte muss in einer GROUP BY-Klausel erscheinen oder als Aggregatfunktion verwendet werden“ angezeigt.
Problembeschreibung
Angenommen, es gibt eine Tabelle mit dem Namen makerar
mit den Spalten cname
, wmname
und avg
. Das Ziel besteht darin, den maximalen cname
-Wert für jedes einzelne avg
zu erhalten. Führen Sie jedoch die folgende Abfrage aus:
<code class="language-sql">SELECT cname, wmname, MAX(avg) FROM makerar GROUP BY cname;</code>
löst einen Fehler aus, da die Spalte wmname
weder in der Klausel GROUP BY
enthalten ist noch als Aggregatfunktion verwendet wird.
Lösung
Es gibt im Wesentlichen zwei Möglichkeiten, dieses Problem zu lösen:
1. Unterabfrage und Join-Methode
Diese Methode verwendet eine Unterabfrage, um den maximalen cname
-Wert für jedes avg
zu berechnen, und verknüpft dann die Unterabfrage mit der Haupttabelle, um den entsprechenden wmname
:
<code class="language-sql">SELECT m.cname, m.wmname, t.mx FROM ( SELECT cname, MAX(avg) AS mx FROM makerar GROUP BY cname ) t JOIN makerar m ON m.cname = t.cname AND t.mx = m.avg ;</code>
2. Fensterfunktionsmethode
Fensterfunktionen bieten eine einfachere Alternative, um Aggregatberechnungen innerhalb von Gruppen durchzuführen:
<code class="language-sql">SELECT cname, wmname, MAX(avg) OVER (PARTITION BY cname) AS mx FROM makerar ;</code>
Hinweis: Während die Fensterfunktion den maximalen cname
-Wert für jedes avg
korrekt anzeigt, kann es zu doppelten Datensätzen kommen.
Das obige ist der detaillierte Inhalt vonWarum tritt in SQL-Abfragen die Meldung „Spalte muss in der GROUP BY-Klausel erscheinen oder in einer Aggregatfunktion verwendet werden' auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!