ホームページ > データベース > mysql チュートリアル > SQL の「列 'wmname' は GROUP BY 句に指定するか、集計関数で使用する必要があります」を解決する方法は?

SQL の「列 'wmname' は GROUP BY 句に指定するか、集計関数で使用する必要があります」を解決する方法は?

Barbara Streisand
リリース: 2025-01-18 13:56:11
オリジナル
432 人が閲覧しました

How to Solve

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

SQL クエリで、選択フィールドが GROUP BY 句に含まれておらず、集計操作も実行されない場合、「列 'wmname' は GROUP BY 句に表示されるか、集計関数として使用される必要があります。」エラー メッセージが表示されます。 。

具体的には、対応する国のマネージャー名 (wmname) を返しながら、各国 (cname) の最大平均 (avg) を見つけようとしています。ただし、wmname は GROUP BY 句に含まれておらず、集計関数でも使用されていません。

考えられる解決策:

この問題を解決するにはいくつかの方法があります:

方法 1: サブクエリと結合を使用する

この方法では、各国の最大平均を計算するサブクエリを作成し、その結果を元のテーブルと結合して国の管理者の名前を含めます。

<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>
ログイン後にコピー

方法 3: DISTINCT と ROW_NUMBER() を使用する

より明示的なアプローチは、DISTINCT を使用して一意の結果を保証し、ROW_NUMBER() を使用して国ごとの平均が最も高い行のみを選択することです。

<code class="language-sql">SELECT DISTINCT /* distinct here matters, because maybe there are various tuples for the same max value */
    m.cname, m.wmname, t.avg AS mx
FROM (
    SELECT cname, wmname, avg, ROW_NUMBER() OVER (PARTITION BY cname ORDER BY avg DESC) AS rn 
    FROM makerar
) t JOIN makerar m ON m.cname = t.cname AND m.wmname = t.wmname AND t.rn = 1;</code>
ログイン後にコピー

これらのメソッドのいずれかを使用すると、国マネージャー名 (wmname) が各国の最大平均値に正しく関連付けられている、期待される結果を取得できます。 方法 3 の ROW_NUMBER()ORDER BY 節に注意してください。これは、最大平均を正しく選択するために重要です。 以前のバージョンにはこの句がなかったため、不正確な結果が生じる可能性がありました。

以上がSQL の「列 'wmname' は GROUP BY 句に指定するか、集計関数で使用する必要があります」を解決する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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