Heim > Datenbank > MySQL-Tutorial > Warum löst meine SQL-Abfrage den Fehler „Spalte muss in der GROUP BY-Klausel erscheinen oder in einer Aggregatfunktion verwendet werden' aus?

Warum löst meine SQL-Abfrage den Fehler „Spalte muss in der GROUP BY-Klausel erscheinen oder in einer Aggregatfunktion verwendet werden' aus?

Susan Sarandon
Freigeben: 2025-01-18 13:52:09
Original
395 Leute haben es durchsucht

Why Does My SQL Query Throw a

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:

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

    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.

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

    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!

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