avg(salary);“ schlägt fehl und wie kann ich Mitarbeiter mit einem überdurchschnittlichen Einkommen richtig finden? " /> avg(gehalt);" Scheitern, und wie kann ich Mitarbeiter mit einem überdurchschnittlichen Verdienst richtig finden? " />
Eine eingehende Untersuchung von „FEHLER 1111 (HY000): Ungültige Verwendung der Gruppenfunktion“
Diese Abfrage zielt darauf ab, Mitarbeiter zu identifizieren, die mehr verdienen als das durchschnittliche Gehalt in einer Personaltabelle, die Attribute wie ec, Name, Code, Dob und Gehalt enthält Lösung:
select* from staff where salary > avg(salary);
schlägt aufgrund einer ungültigen Verwendung der Gruppenfunktion innerhalb der WHERE-Klausel fehl. Aggregatfunktionen wie AVG können nicht direkt in WHERE-Klauseln verwendet werden, es sei denn, sie sind in einer Unterabfrage innerhalb eines HAVING enthalten Klausel oder eine Auswahlliste, und die Spalte, die aggregiert wird, ist eine äußere Referenz.
Richtig Ansätze:
Verwendung einer Unterabfrage in der WHERE-Klausel:
select * from staff where salary > (select avg(salary) from staff)
Verwendung einer HAVING-Klausel:
select deptid,COUNT(*) as TotalCount from staff group by deptid having count(*) > 2
Die HAVING-Klausel ermöglicht das Filtern basierend auf Gruppen- oder Aggregatwerten und verhält sich Ähnlich einer WHERE-Klausel in Fällen ohne GROUP BY. Durch die Verschiebung der Aggregatfunktion in die HAVING-Klausel identifiziert die Abfrage korrekt Mitarbeiter, deren Gehalt über dem Durchschnitt liegt.
Das obige ist der detaillierte Inhalt vonWarum wird „* aus Mitarbeitern auswählen, bei denen das Gehalt > Durchschnitt(Gehalt);' ist? Scheitern, und wie kann ich Mitarbeiter mit einem überdurchschnittlichen Verdienst richtig finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!