ホームページ >データベース >mysql チュートリアル >MySQL サブクエリで GROUP 関数を正しく使用して、複数のサプライヤーから供給される部品を検索する方法

MySQL サブクエリで GROUP 関数を正しく使用して、複数のサプライヤーから供給される部品を検索する方法

DDD
DDDオリジナル
2025-01-11 22:46:451015ブラウズ

How to Correctly Use GROUP Functions in MySQL Subqueries to Find Parts Supplied by Multiple Suppliers?

MySQL の「グループ関数の無効な使用」エラーのトラブルシューティング

このガイドは、複数のサプライヤーや部品が関係するデータをクエリするときによく発生する一般的な MySQL エラー「グループ関数の使用が無効です」に対処します。 目標は、少なくとも 2 つの異なるサプライヤーから供給される部品を見つけることです。

核心的な問題は、サブクエリ内で WHERE のような集計関数を扱うときの COUNT() 句の誤用にあります。 WHERE はグループ化で個々の行をフィルタリングし、HAVING は集計で行のグループをフィルタリングします。 部品ごとのサプライヤーの (集計値) に基づいてフィルタリングする必要があるため、HAVING は必須です。

正しいアプローチには、サブクエリを使用して基準を満たす部品 (少なくとも 2 つのサプライヤー) を特定し、IN を使用してメイン クエリからそれらの部品を選択します。 重要な変更は、サブクエリ内の WHEREHAVING に置き換えることです。

修正されたサブクエリ構造は次のようになります:

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

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