Heim > Datenbank > MySQL-Tutorial > Warum tritt in SQL-Abfragen die Meldung „Spalte muss in der GROUP BY-Klausel erscheinen oder in einer Aggregatfunktion verwendet werden' auf?

Warum tritt in SQL-Abfragen die Meldung „Spalte muss in der GROUP BY-Klausel erscheinen oder in einer Aggregatfunktion verwendet werden' auf?

Patricia Arquette
Freigeben: 2025-01-18 14:01:09
Original
469 Leute haben es durchsucht

Why Does

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>
Nach dem Login kopieren

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:

abzurufen
<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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage