Heim >Datenbank >MySQL-Tutorial >Warum erzeugt meine SQL-Abfrage den Fehler „Spalte nicht in Aggregate- oder Group-by-Klausel'?

Warum erzeugt meine SQL-Abfrage den Fehler „Spalte nicht in Aggregate- oder Group-by-Klausel'?

Susan Sarandon
Susan SarandonOriginal
2025-01-23 01:26:09376Durchsuche

Why Does My SQL Query Produce a

Fehlerbehebung „Spalte nicht in Aggregate- oder Group-By-Klausel“ SQL-Fehler

Diese Anleitung behebt den häufigen SQL-Fehler: „Spalte ‚Employee.EmpID‘ ist in der Auswahlliste ungültig, da sie weder in einer Aggregatfunktion noch in der GROUP BY-Klausel enthalten ist.“ Dieser Fehler tritt auf, wenn Ihre SELECT-Anweisung eine Spalte enthält, die weder aggregiert noch Teil der GROUP BY-Klausel ist.

Aggregatfunktionen und GROUP BY verstehen

Eine GROUP BY-Klausel gruppiert Zeilen mit identischen Werten in angegebenen Spalten. Um Daten aus diesen Gruppen anzuzeigen, verwenden Sie normalerweise Aggregatfunktionen wie SUM, COUNT, AVG, MIN oder MAX. Diese Funktionen berechnen zusammenfassende Werte für jede Gruppe.

Die Einwertregel

Die Einzelwertregel von SQL schreibt vor, dass jede nicht aggregierte Spalte in der SELECT-Liste einen einzelnen, konsistenten Wert innerhalb jeder Gruppe haben muss. Wenn eine nicht aggregierte Spalte mehrere Werte pro Gruppe enthält, ist die Abfrage mehrdeutig, da SQL nicht bestimmen kann, welcher Wert zurückgegeben werden soll.

Fehler beheben

Angenommen, Ihr Ziel besteht darin, Standort-IDs und die Mitarbeiterzahl an jedem Standort aufzulisten. Die korrigierte Abfrage verwendet die COUNT Aggregatfunktion:

<code class="language-sql">SELECT loc.LocationID, COUNT(emp.EmpID) AS EmployeeCount
FROM Employee AS emp
FULL JOIN Location AS loc ON emp.LocationID = loc.LocationID
GROUP BY loc.LocationID;</code>

COUNT(emp.EmpID) berechnet die Anzahl der Mitarbeiter für jeden LocationID. Dadurch wird ein einzelner EmployeeCount-Wert pro Gruppe sichergestellt, wodurch die Einwertregel erfüllt und der Fehler beseitigt wird. Die GROUP BY loc.LocationID-Klausel gruppiert die Ergebnisse nach Standort.

Das obige ist der detaillierte Inhalt vonWarum erzeugt meine SQL-Abfrage den Fehler „Spalte nicht in Aggregate- oder Group-by-Klausel'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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