SQL エラー: 列は GROUP BY 句に指定するか、集計関数として使用する必要があります
グループ化された集計クエリを実行するときは、選択した列が GROUP BY
句に表示されるか、集計関数の計算に参加することを確認する必要があります。それ以外の場合、「列は GROUP BY 句に指定するか、集計関数として使用する必要があります」のようなエラー メッセージが表示されます。
問題の説明
列 makerar
、cname
、および 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 サイトの他の関連記事を参照してください。