ホームページ >データベース >mysql チュートリアル >サブクエリでの MySQL の「グループ関数の無効な使用」エラーを修正する方法
MySQL の「グループ関数の無効な使用」エラーのデバッグ
問題:
少なくとも 2 つのサプライヤーから供給された部品を識別するように設計されたクエリにより、「グループ関数の無効な使用」エラーが発生しました:
<code class="language-sql">SELECT c1.pid -- Select part ID (pid) FROM Catalog AS c1 -- From the Catalog table WHERE c1.pid IN ( -- Where pid is in the set: SELECT c2.pid -- Of pids FROM Catalog AS c2 -- From the Catalog table WHERE c2.pid = c1.pid AND COUNT(c2.sid) >= 2 -- Incorrect: COUNT in WHERE clause );</code>
問題:
このエラーは、COUNT()
関数の不適切な配置に起因します。 WHERE
句は、グループ化前に個々の行をフィルタリングするため、このコンテキストでは集計関数 COUNT()
が無効になります。
解決策:
正しいアプローチには、HAVING
句を使用することが含まれます。これにより、 グループ化と集計がフィルタリングされます。
<code class="language-sql">SELECT c1.pid FROM Catalog AS c1 WHERE c1.pid IN ( SELECT c2.pid FROM Catalog AS c2 GROUP BY c2.pid HAVING COUNT(c2.sid) >= 2 );</code>
説明:
修正されたクエリは、Catalog
を使用して pid
ごとに GROUP BY c2.pid
テーブルをグループ化します。 次に、HAVING
句でこれらのグループをフィルタリングし、サプライヤー ID (sid
) の数が 2 以上であるグループのみを保持します。これにより、少なくとも 2 つのサプライヤーの部品が正確に識別されます。 次に、外側のクエリは、これらのフィルターされたグループから pid
値を選択します。
以上がサブクエリでの MySQL の「グループ関数の無効な使用」エラーを修正する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。