SELECT S.NAME ,S.POINT ,CASE WHEN V.A= S.POINT THEN '最大' ELSE NULL END FROM STUDENT S ,(SELECT MAX(S.POINT) A FROM STUDENT S) V --NGコード SELECT S.NAME ,S.POINT, CASE WHEN MAX(S.POINT) = S.POINT THEN '最大' ELSE NULL END FROM STUDENT S __________________________________________ ```### 前提・実現したいこと sqlでCASE式内での集約関数の扱いについての疑問です。 名前と点数を持ってるSTUDENTテーブル対して以下のような出力結果を得たいです。 行いたい結果は ユーザ 値 最大か否か A 100 B 200 C 300 D 400 E 500 最大 ですが、同じ実行結果を得るためにNGコードを書きましたが エラーを吐きます。 ### 発生している問題・エラーメッセージ エラーメッセージ ```ここに言語名を入力 Error [row:2,col:1] ORA-00937: 単一グループのグループ関数ではありません。
試したこと
CASE式内で集約関数が使えることは理解しています。
問題のコードにGROUP BY にSTUDENT.POINT,STUDENT.NAME を追記すれば実装結果は違いますが、
コードが走ることもしてます。
ということは、集約関数でテーブルの値を集約後に内部の値と比較するということが不可能なのでしょうか?
ですが、集約関数同士での式は問題なく書けますし、すこし明快な理解ができていません。
有識者の方、よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー