ホームページ > データベース > mysql チュートリアル > SQL クエリで「列は GROUP BY 句に表示されるか、集計関数で使用される必要があります」というエラーがスローされるのはなぜですか?

SQL クエリで「列は GROUP BY 句に表示されるか、集計関数で使用される必要があります」というエラーがスローされるのはなぜですか?

Susan Sarandon
リリース: 2025-01-18 13:52:09
オリジナル
395 人が閲覧しました

Why Does My SQL Query Throw a

「GROUP BY 句に出現するか、集計関数で使用する必要がある」SQL エラーの解決

SQL エラー「列 "makerar.wmname" は GROUP BY 句に表示されるか、集計関数で使用される必要があります」は、クエリでデータをグループ化しているが (GROUP BY を使用)、グループ化に含まれていない列を選択している場合に発生します。 SQL では、GROUP BY 句にない選択された列は集計されるか (たとえば、MAXMINAVGSUMCOUNT を使用) または省略される必要があります。

解決策:

これを解決するためのいくつかのアプローチを次に示します:

  1. wmname 句に GROUP BY を含めます:

    これは、一意の各 wmname に関連付けられたすべての cname 値が必要な場合の最も簡単な解決策です。

    <code class="language-sql">SELECT cname, wmname, MAX(avg)
    FROM makerar
    GROUP BY cname, wmname;</code>
    ログイン後にコピー
  2. 最大値と結合のサブクエリ:

    このアプローチは、各 wmname の最大 avg に対応する cname のみが必要な場合に便利です。

    <code class="language-sql">SELECT m.cname, m.wmname, t.mx
    FROM (
        SELECT cname, MAX(avg) AS mx
        FROM makerar
        GROUP BY cname
    ) t
    JOIN makerar m ON m.cname = t.cname AND m.avg = t.mx;</code>
    ログイン後にコピー

    これは、最初にサブクエリ内の各 avg の最大 cname を見つけます。次に、この結果を元のテーブルに結合して、対応する wmname.

    を取得します。
  3. ウィンドウ関数 (サポートされている場合):

    データベース システムがウィンドウ関数をサポートしている場合 (最新のシステムはほとんどサポートしています)、これにより簡潔で効率的なソリューションが提供されます。

    <code class="language-sql">SELECT cname, wmname, MAX(avg) OVER (PARTITION BY cname) AS mx
    FROM makerar;</code>
    ログイン後にコピー

    ウィンドウ関数は、元の行構造を変更せずに、各 avg パーティションの最大 cname を計算します。 固有の結果のみが必要な場合は、DISTINCT が必要になる場合があります。

これらのメソッドのいずれかを実装すると、avg 列を適切に処理しながら、各 cname の最大平均 (wmname) が正しく取得され、SQL エラーが排除されます。 特定のデータ要件とデータベース機能に最適なソリューションを選択してください。

以上がSQL クエリで「列は GROUP BY 句に表示されるか、集計関数で使用される必要があります」というエラーがスローされるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート