GROUP BY句に含めるか、集計関数で使用する必要があります



Must Appear Group Clause



今日、統計のパケットが発生した場合のpgsqlエラーmust appear in the GROUP BY clause or be used in an aggregate function mysqlでは可能ですが、pgsqlエラーでは、stackoverflowクエリを実行したところ、発生したことがわかりました。同じ問題が発生します。これは、一般的な重合pgsqlの質問であるSQL3標準です。以前は、表示されたフィールドを選択して、GROUP BYに表示する必要がありました。 in。問題について説明しましょう。

makerarというテーブルがあり、以下のテーブルに記録されています。
cname | wmname |平均
-------- | -------- | -----------------------
カナダ|ゾロ| 2.00
スペイン|ルフィ| 1.00
スペイン|ウソップ| 5.00



それぞれに問い合わせたいcname最大avg、言い回しによるとmysql

SELECT cname, wmname, MAX(avg) FROM makerar GROUP BY cname

pgsqlでエラーが発生しました



ERROR: column 'makerar.wmname' must appear in the GROUP BY clause or be used in an aggregate function LINE 1: SELECT cname, wmname, MAX(avg) FROM makerar GROUP BY cname

意味はwmnameフィールドマストGROUP BY重合または機能しているように見える

だから私はエラーに従います、wmname追加されたフィールドGROUP BY戻って、それ

SELECT cname, wmname, MAX(avg) FROM makerar GROUP BY cname, wmname

結果は



cname wmname 平均
カナダ ゾロ 2.00
スペイン ルフィ 1.00
スペイン ウソップ 5.00

私が期待する結果は

cname wmname 平均
カナダ ゾロ 2.00
スペイン ウソップ 5.00

2つの解決策がありますが、私はを読んでから、

一般的な考え方は、サブクエリで重合を完了することです。次に、フィールド(ここではmakerar自体)を含む関連テーブルを表示します。フィールド(ここではwmname)を取得するため、次のようなSQLになります。

SELECT t.cname, m.wmname, t.max FROM (SELECT cname, MAX(avg) AS max FROM makerar GROUP BY cname) t LEFT JOIN makerar m ON t.cname = m.cname AND t.max = m.avg

参照リンク

https://stackoverflow.com/questions/19601948/must-appear-in-the-group-by-clause-or-be-used-in-an-aggregate-function#