ホームページ >データベース >mysql チュートリアル >「select * from Staff where pay > avg(salary);」となるのはなぜですか?失敗しても、平均以上の収入を得ているスタッフを正しく見つけるにはどうすればよいでしょうか?
avg(salary);" 失敗しました。平均以上の収入を得ているスタッフを正しく見つけるにはどうすればよいですか? " /> 平均(給与);"失敗しても、平均以上の収入を得ているスタッフを正しく見つけるにはどうすればよいでしょうか? " />
「エラー 1111 (HY000): グループ機能の無効な使用」の詳細な調査
このクエリは、より多くの収入を得ているスタッフ メンバーを特定することを目的としています。 ec、名前、コード、職歴、給与などの属性を含むスタッフ テーブル内の平均給与よりも高くなります。 solution:
select* from staff where salary > avg(salary);
は、WHERE 句内でのグループ関数の無効な使用が原因で失敗します。AVG などの集計関数は、HAVING 内のサブクエリに含まれていない限り、WHERE 句で直接使用できません。句または選択リストであり、集計される列は外部参照です。
正解アプローチ:
WHERE 句でのサブクエリの使用:
select * from staff where salary > (select avg(salary) from staff)
HAVING 句の使用:
select deptid,COUNT(*) as TotalCount from staff group by deptid having count(*) > 2
HAVING 句により、グループに基づいたフィルタリングが可能になりますGROUP BY がない場合は WHERE 句と同様に動作します。集計関数を HAVING 句に移動することで、クエリは給与が平均を超えているスタッフ メンバーを正確に識別します。
以上が「select * from Staff where pay > avg(salary);」となるのはなぜですか?失敗しても、平均以上の収入を得ているスタッフを正しく見つけるにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。