ホームページ >データベース >mysql チュートリアル >SQL WHERE 句で AVG() のような集計関数を正しく使用するにはどうすればよいですか?

SQL WHERE 句で AVG() のような集計関数を正しく使用するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-19 14:58:14496ブラウズ

How Can I Correctly Use Aggregate Functions Like AVG() in SQL WHERE Clauses?

SQL クエリでの集計関数の使用

データベースをクエリする場合、概要統計やグループ データを計算するために AVG() などの集計関数を使用するのが一般的です。ただし、集計関数の使用を管理する特定のルールがあり、エラーが発生する場合があります。

エラー 1111: グループ関数の無効な使用

よくあるエラーの 1 つは、「エラー 1111 (HY000)」です。 ): グループ関数の使用が無効です」。これは、WHERE 句で集計関数が誤って使用された場合に発生します。この問題を説明するための例を考えてみましょう。

問題: 次の属性を持つ "staff" テーブルがあるとします: ec、name、code、dob、salary、リストへのクエリを作成します。平均給与以上の収入を得ているスタッフ。

不正解解決策:

select * from staff where salary > avg(salary);

この間違った解決策では、集計関数 AVG() が SQL 構文で許可されていない WHERE 句に配置されています。

正しい解決策

この問題を解決するには、次の 2 つのオプションがあります:

1. WHERE 句でのサブクエリの使用:

select *
from staff
where salary > (select avg(salary) from staff)

このクエリは、サブクエリとして平均給与を計算し、それを外側のクエリの各従業員の給与と比較します。

2. HAVING 句を使用したグループ化とフィルタリング:

select deptid, COUNT(*) as TotalCount
from staff
group by deptid
having count(*) > 2

このクエリは、HAVING 句を使用して、特定のプロパティを持つグループ (この場合は 3 人以上の従業員がいる部門) を選択するための条件を指定します。 ).

ルールを理解する

集計関数は SQL の次の場所でのみ使用できることを覚えておくことが重要です。クエリ:

  • SELECT リスト: 要約統計量またはカウント値を計算します。
  • GROUP BY 句: データをグループ化し、集計計算を実行します。
  • HAVING 句: 選択条件を指定する

集計関数の誤用を回避することで、SQL クエリの有効性と効率性が確保されます。

以上がSQL WHERE 句で AVG() のような集計関数を正しく使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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