ホームページ > データベース > mysql チュートリアル > SQL クエリで「列は GROUP BY 句に出現するか、集計関数で使用する必要があります」が発生するのはなぜですか?

SQL クエリで「列は GROUP BY 句に出現するか、集計関数で使用する必要があります」が発生するのはなぜですか?

Patricia Arquette
リリース: 2025-01-18 14:01:09
オリジナル
510 人が閲覧しました

Why Does

SQL エラー: 列は GROUP BY 句に指定するか、集計関数として使用する必要があります

グループ化された集計クエリを実行するときは、選択した列が GROUP BY 句に表示されるか、集計関数の計算に参加することを確認する必要があります。それ以外の場合、「列は GROUP BY 句に指定するか、集計関数として使用する必要があります」のようなエラー メッセージが表示されます。

問題の説明

makerarcname、および wmname を持つ avg という名前のテーブルがあるとします。目標は、個別の cname ごとに最大 avg 値を取得することです。ただし、次のクエリを実行します:

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

列は wmname 句に含まれておらず、集計関数としても使用されていないため、GROUP BY はエラーをスローします。

解決策

この問題を解決するには、主に 2 つの方法があります:

1. サブクエリと結合メソッド

このメソッドは、サブクエリを使用して各 cname の最大 avg 値を計算し、サブクエリをメイン テーブルと結合して、対応する wmname:

を取得します。
<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 t.mx = m.avg
;</code>
ログイン後にコピー

2. ウィンドウ関数メソッド

ウィンドウ関数は、グループ内で集計計算を実行するためのより簡単な代替手段を提供します。

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

注: ウィンドウ関数は各 cname の最大 avg 値を正しく表示しますが、レコードが重複する可能性があります。

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

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