Heim >Datenbank >MySQL-Tutorial >Warum gibt „aus Personal auswählen* mit Gehalt > Durchschnitt(Gehalt)' „FEHLER 1111 (HY000): Ungültige Verwendung der Gruppenfunktion' zurück?
avg(salary)“ Rückgabe „FEHLER 1111 (HY000): Ungültige Verwendung der Gruppenfunktion“? " /> avg(salary)" Rückgabe „FEHLER 1111 (HY000): Ungültige Verwendung der Gruppenfunktion“? " />
Ein Versuch, Mitarbeiter, die über dem Durchschnittsgehalt verdienen, mithilfe von aufzulisten Abfrage „Wählen Sie* aus dem Personal aus, bei dem das Gehalt > avg(salary)“ gibt „FEHLER 1111 (HY000): Ungültige Verwendung der Gruppenfunktion“ zurück. Dieses Problem tritt aufgrund der falschen Verwendung einer Aggregatfunktion in der WHERE-Klausel auf.
Eine Aggregatfunktion, wie in diesem Fall AVG(), kann in der WHERE-Klausel nicht verwendet werden Sofern keine spezifischen Bedingungen erfüllt sind, können Aggregate in der WHERE-Klausel erscheinen, wenn sie in einer Unterabfrage mit einer HAVING-Klausel oder einer Auswahlliste verwendet werden und die aggregierte Spalte eine äußere Referenz ist.
Um den Fehler zu beheben, schreiben Sie die Abfrage mithilfe einer Unterabfrage in um WHERE-Klausel:
select * from staff where salary > (select avg(salary) from staff)
Diese Abfrage verwendet eine Unterabfrage, um das Durchschnittsgehalt zu berechnen, das dann mit dem Gehalt jedes Mitarbeiters verglichen wird.
Erwägen Sie alternativ die Verwendung der HAVING-Klausel, um das Aggregat zu filtern Daten:
select deptid,COUNT(*) as TotalCount from staff group by deptid having count(*) > 2
Die HAVING-Klausel in dieser Abfrage beschränkt die Ergebnisse auf Abteilungen mit mehr als zwei Mitarbeitern.
Das obige ist der detaillierte Inhalt vonWarum gibt „aus Personal auswählen* mit Gehalt > Durchschnitt(Gehalt)' „FEHLER 1111 (HY000): Ungültige Verwendung der Gruppenfunktion' zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!