ホームページ >データベース >mysql チュートリアル >「select * from Staff where pay > avg(salary);」となるのはなぜですか?失敗しても、平均以上の収入を得ているスタッフを正しく見つけるにはどうすればよいでしょうか?

「select * from Staff where pay > avg(salary);」となるのはなぜですか?失敗しても、平均以上の収入を得ているスタッフを正しく見つけるにはどうすればよいでしょうか?

DDD
DDDオリジナル
2024-12-24 22:47:15317ブラウズ

Why Does 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。