Behebung des SQL-Fehlers „Muss in der GROUP BY-Klausel erscheinen oder in einer Aggregatfunktion verwendet werden“
Der SQL-Fehler „Spalte „makerar.wmname“ muss in der GROUP BY-Klausel erscheinen oder in einer Aggregatfunktion verwendet werden“ tritt auf, wenn Ihre Abfrage Daten gruppiert (mithilfe von GROUP BY
), aber Spalten auswählt, die nicht an der Gruppierung beteiligt sind. SQL erfordert, dass jede ausgewählte Spalte, die nicht in der GROUP BY
-Klausel enthalten ist, aggregiert (z. B. mit MAX
, MIN
, AVG
, SUM
, COUNT
) oder weggelassen werden muss.
Lösungen:
Hier sind mehrere Ansätze, um dieses Problem zu beheben:
Fügen Sie wmname
in die GROUP BY
-Klausel ein:
Dies ist die einfachste Lösung, wenn Sie alle wmname
Werte benötigen, die jedem eindeutigen cname
zugeordnet sind.
<code class="language-sql">SELECT cname, wmname, MAX(avg) FROM makerar GROUP BY cname, wmname;</code>
Unterabfrage für Maximalwert und JOIN:
Dieser Ansatz ist nützlich, wenn Sie für jedes wmname
nur das avg
benötigen, das dem Maximum cname
entspricht.
<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 m.avg = t.mx;</code>
Dadurch wird zunächst das Maximum avg
für jedes cname
in einer Unterabfrage ermittelt. Anschließend wird dieses Ergebnis wieder mit der Originaltabelle verknüpft, um das entsprechende wmname
.
Fensterfunktionen (falls unterstützt):
Wenn Ihr Datenbanksystem Fensterfunktionen unterstützt (die meisten modernen Systeme tun dies), bietet dies eine übersichtliche und effiziente Lösung.
<code class="language-sql">SELECT cname, wmname, MAX(avg) OVER (PARTITION BY cname) AS mx FROM makerar;</code>
Fensterfunktionen berechnen das Maximum avg
für jede cname
Partition, ohne die ursprüngliche Zeilenstruktur zu ändern. Möglicherweise benötigen Sie DISTINCT
, wenn Sie nur einzigartige Ergebnisse erzielen möchten.
Durch die Implementierung einer dieser Methoden rufen Sie den maximalen Durchschnitt (avg
) für jedes cname
korrekt ab und behandeln gleichzeitig die Spalte wmname
ordnungsgemäß, wodurch der SQL-Fehler beseitigt wird. Wählen Sie die Lösung, die Ihren spezifischen Datenanforderungen und Datenbankfunktionen am besten entspricht.
Das obige ist der detaillierte Inhalt vonWarum löst meine SQL-Abfrage den Fehler „Spalte muss in der GROUP BY-Klausel erscheinen oder in einer Aggregatfunktion verwendet werden' aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!