MySQL の「グループ関数の無効な使用」エラーのトラブルシューティング
このガイドは、複数のサプライヤーや部品が関係するデータをクエリするときによく発生する一般的な MySQL エラー「グループ関数の使用が無効です」に対処します。 目標は、少なくとも 2 つの異なるサプライヤーから供給される部品を見つけることです。
核心的な問題は、サブクエリ内で WHERE
のような集計関数を扱うときの COUNT()
句の誤用にあります。 WHERE
はグループ化前で個々の行をフィルタリングし、HAVING
は集計後で行のグループをフィルタリングします。 部品ごとのサプライヤーの数 (集計値) に基づいてフィルタリングする必要があるため、HAVING
は必須です。
正しいアプローチには、サブクエリを使用して基準を満たす部品 (少なくとも 2 つのサプライヤー) を特定し、IN
を使用してメイン クエリからそれらの部品を選択します。 重要な変更は、サブクエリ内の WHERE
を HAVING
に置き換えることです。
修正されたサブクエリ構造は次のようになります:
<code class="language-sql">( SELECT c2.pid FROM Catalog AS c2 GROUP BY c2.pid HAVING COUNT(DISTINCT c2.sid) >= 2 )</code>
この改訂されたサブクエリでは、GROUP BY c2.pid
を使用して部品 ID ごとに行をグループ化し、HAVING COUNT(DISTINCT c2.sid) >= 2
を使用してこれらのグループをフィルタリングし、2 つ以上の異なるサプライヤー ID を持つグループのみを保持します。 DISTINCT
キーワードにより、同じ部品を複数回供給した場合でも、各サプライヤーが 1 回だけカウントされるようになります。
つまり、MySQL の集計値に基づいて行のグループを正しくフィルタリングするには、サブクエリ内の集計関数で HAVING
を使用することを忘れないでください。 この区別は、「グループ関数の無効な使用」エラーを解決し、目的のデータを正確に取得するための鍵となります。
以上がMySQL サブクエリで GROUP 関数を正しく使用して、複数のサプライヤーから供給される部品を検索する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。