は、GROUP BY句に含まれるか、集約関数で使用される必要があります。
今日、統計情報をグループ化する際、pgsqlがエラーを報告しました。
must appear in the GROUP BY clause or be used in an aggregate function
これはpgsqlでよくある集計の問題で、SQL3標準以前では、表示用に選択されたフィールドは必ず
GROUP BY
で、その問題を以下に説明します。
というテーブルがあります。
makerar
で、そのテーブルには以下のように記録されています。
cname|wmname|avg
--------|--------|-----------------------
カナダ|ゾロ|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つありますが、私は1つしか理解できなかったので、こちらを記録します。
一般的なアイデアは、サブクエリで集計を完了し、表示したいフィールドを含むテーブル(この場合は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://www.cnblogs.com/zxhyJack/p/9934259.html
関連
-
(NTDLL.DLL): 0xC0000005: アクセス違反 - 解決
-
ERROR 1046 (3D000)の解決策です。MySQLでアカウント削除時にデータベースが選択されない問題
-
解決策: テーブルの定義が正しくありません。
-
MySQLデータベースのクエリ機能を使用する際に、グループ関数の使用が無効である問題の解決方法
-
SocketTimeoutExceptionが発生しました。読み取りがタイムアウトした問題のトラブルシューティング
-
EF Exception Inquiry (エンティティオブジェクトは、IEntityChangeTrackerの複数のインスタンスから参照できません。)...
-
IEntityChangeTracker の複数のインスタンスからエンティティオブジェクトを参照できない場合の対処法
-
[Mac] sudo mongod コマンド、プロンプトコマンドが見つかりません。
-
PDOデータベース接続エラー。SQLSTATE[HY000] [2002] そのようなファイルやディレクトリはありません。
-
mysql: この操作には (少なくとも 1 つの) RELOAD 権限が必要です。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
mysql reports Access denied; you need (at least one of) SUPER privilege(s) for this operation
-
MySQL - エラーです。executeQuery() でデータ操作ステートメントを発行できません。
-
親行が削除または更新できない: 外部キー制約に失敗 解決策
-
Hibernateでhibernate.propertiesが見つからない問題とデータベース方言の更新の問題
-
SQL SERVER データベース SELECT INTO および INSERT INTO の使用法(テンポラリテーブルへのデータ挿入を含む)
-
Postgresql でテーブル "t" の FROM 句の項目が見つからない。
-
mongodbの更新操作の更新
-
MongoDBコマンド
-
MySQL上級SQLステートメント
-
Linuxでmysql-5.7.30をインストールするための詳細な手順