ホームページ >データベース >mysql チュートリアル >サブクエリでの MySQL の「グループ関数の無効な使用」エラーを修正する方法

サブクエリでの MySQL の「グループ関数の無効な使用」エラーを修正する方法

Barbara Streisand
Barbara Streisandオリジナル
2025-01-11 22:38:46860ブラウズ

How to Fix MySQL's

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

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