
下記のようなテーブルで、 レベル4以下で点数が入力されているMAXの行を持ってくるにはどうしたらよいでしょうか?よろしくお願いいたします。
職員番号氏名レベル点数
01000山田 花子4
01000山田 花子340
01000山田 花子230
01000山田 花子120
01100田中 あああ410
01100田中 あああ320
01100田中 あああ230
01100田中 あああ140
01200佐藤 あああ4
01200佐藤 あああ3
01200佐藤 あああ230
01200佐藤 あああ140
この場合欲しい結果は 職員番号01000の人は点数40点の行、01100の人は点数10点の行、01200の人は点数30点の行 3行を表示したいです。
No.2ベストアンサー
- 回答日時:
select 職員番号, 氏名, レベル, 点数
from aaaa a0
where 点数 is not null and レベル <= 4 and
a0.レベル=(select max(a1.レベル)
from aaaa a1
where a1.職員番号 = a0.職員番号 and 点数 is not null and レベル<=4) and
a0.点数 = (select max(a2.点数)
from aaaa a2
where a0.職員番号 = a2.職員番号 and
a0.レベル = a2.レベル)
order by 職員番号
ウィンドウ構文を使わずにやろうとすると、こんな感じでしょうか。
なお、もし、(職員番号,レベル)の組に重複がないのであれば、where区内の2つめのselect文を含む条件( a0.点数=で始まる比較)は不要です。(ちなみに、一応実験は、01100でレベル4で得点5点を追加して行っています。)
また、常識的に、職員番号が同じで氏名が違うなんてことはあり得ないとしていますが、もしこれを考慮に入れ別人として扱う必要があるなら、その条件は追加が必要です。
No.1
- 回答日時:
> 下記のようなテーブルで、 レベル4以下で点数が入力されているMAXの行を持ってくるには
> どうしたらよいでしょうか?よろしくお願いいたします。
これだけなら、仮にテーブル名を「AAA」とした時
select 職員番号,氏名,レベル,点数
from (
select AAA.*,
rank() over( partition by 職員番号 order by 点数 desc ) rnk
from AAA
where AAA.レベル<=4 and AAA.点数 is not null ) Q
where rnk=1;
で求められますが。
望まれている
> この場合欲しい結果は
> 職員番号01000の人は点数40点の行、
> 01100の人は点数10点の行、
> 01200の人は点数30点の行
> 3行を表示したいです。
にはなりません。そもそも、職員番号「01100」の場合レベル「1」で、点数が「40」の人がいるので
質問内容からすると、そちらが優先になります。
select 職員番号,氏名,レベル,点数
from (
select AAA.*,
rank() over( partition by 職員番号 order by レベル desc, 点数 desc ) rnk
from AAA
where AAA.レベル<=4 and AAA.点数 is not null ) Q
where rnk=1;
とすると、例示された結果は出ますが。要件としてどっちが正しいのでしょうか。
この回答への補足
ご回答ありがとうございます。
質問があいまいで申し訳ありませんでした。
正確には レベルが4以下で点数が入力されているMAXのレベルの行を持ってきたいです。
レベル4に点数がなかったらレベル3の行 レベル3にも点数の入力が無かったらレベル2の行を
表示といった感じです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- Excel(エクセル) エクセル 関数 指定の繰り返しの回数 以降(以前)を削除するには、 2 2022/04/24 10:29
- MySQL 【MySQL】本当に困っているので、助けてください。よろしくお願いします。 3 2023/06/03 14:24
- Excel(エクセル) EXCEL 関数を教えてください。(A列の同じ値が複数ある場合vlookupで出来ますか) 4 2022/12/07 20:54
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- バラエティ・お笑い カラオケバトルの次の出演者の中で歌唱力も魂のこもりようも表現力も抜群と思う人を上位から 1 2022/05/04 14:04
- その他(IT・Webサービス) メニューについて 3 2022/07/12 16:06
- Oracle sqlで質問です。 Aテーブルの登録番号をキーにBテーブルから確認番号を取得したいのですが、Bテーブ 4 2023/05/18 13:08
- 教育学 エクセルで、複数条件を全て満たすと合格、満たさないと不合格、と表示されるようにするには? 3 2023/04/03 18:41
- Excel(エクセル) エクセルで休憩時間を引く時と、引かない時の数式 3 2022/11/05 11:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
沿線コード
-
CREATE テーブルでの複数外部...
-
10営業日前の日付を取得したい...
-
SQLの実行結果が異なる
-
Oracleでの文字列連結サイズの上限
-
GROUP BYを行った後に結合した...
-
OracleのSQL*PLUSで、デー...
-
Accessで別テーブルの値をフォ...
-
Date型にNULLをセットしたい V...
-
access2003で学籍番号から生徒...
-
SELECTの結果で同一行を複数回...
-
iserease のDB2 UDBに対してODB...
-
確認ダイアログを出さないでレ...
-
重複をせずに2つのフィールドを...
-
MERGE文を単体テーブルに対して...
-
最新の日付とその金額をクエリ...
-
VBScript(WSH)でのランダムア...
-
ACCESSで大量の更新を行うと「...
-
JOINでの結果取得 サブクエリ...
-
select句副問い合わせ 値の個...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access終了時の最適化が失敗?
-
沿線コード
-
SQLの実行結果が異なる
-
CREATE テーブルでの複数外部...
-
Order by句でバインド変数を使...
-
【SQL】登録されているかを比較...
-
ヤマト急便のチェックデジット...
-
困っています。ORACLE_SQL 複数...
-
SQLの質問です。
-
SQLにて縦を横へ展開
-
SQLの書き方
-
10営業日前の日付を取得したい...
-
平成20年 春期 基本情報技術者 ...
-
SQLについて
-
SQLの集約の方法
-
同一コード毎に最新の名称を取...
-
Oracleビュー:同じ意味で異な...
-
オラクル 名称をコードに変換
-
SQL 特定のカラムが最大値のレ...
-
SQLについて
おすすめ情報