「GROUP BY 句に出現するか、集計関数で使用する必要がある」SQL エラーの解決
SQL エラー「列 "makerar.wmname" は GROUP BY 句に表示されるか、集計関数で使用される必要があります」は、クエリでデータをグループ化しているが (GROUP BY
を使用)、グループ化に含まれていない列を選択している場合に発生します。 SQL では、GROUP BY
句にない選択された列は集計されるか (たとえば、MAX
、MIN
、AVG
、SUM
、COUNT
を使用) または省略される必要があります。
解決策:
これを解決するためのいくつかのアプローチを次に示します:
wmname
句に GROUP BY
を含めます:
これは、一意の各 wmname
に関連付けられたすべての cname
値が必要な場合の最も簡単な解決策です。
<code class="language-sql">SELECT cname, wmname, MAX(avg) FROM makerar GROUP BY cname, wmname;</code>
最大値と結合のサブクエリ:
このアプローチは、各 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
.
ウィンドウ関数 (サポートされている場合):
データベース システムがウィンドウ関数をサポートしている場合 (最新のシステムはほとんどサポートしています)、これにより簡潔で効率的なソリューションが提供されます。
<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 サイトの他の関連記事を参照してください。