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
参照リンク