• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQLの質問です。)

SQLでレベル4以下の最大点数の行を取得する方法

このQ&Aのポイント
  • SQLを使用して、以下のようなテーブルで、レベルが4以下で点数が入力されている最大の行を取得する方法を教えてください。
  • 職員番号、氏名、レベル、点数のカラムを持つテーブルで、職員番号01000の人は点数40の行、01100の人は点数10の行、01200の人は点数30の行の合計3行を取得したいです。
  • 詳しいSQLコマンドやクエリを教えていただけると助かります。よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.1

氏名って職員名と考えると、通常、 職員番号,氏名,レベル,点数 って項目が必要なら 氏名は正規化してテーブル上に持っていないと考えるべきなのだろうけど、 質問上の例見ても同一なので、氏名は職員の名前と考えて、 同一職員番号のレコードには同一氏名しかないと考えて回答すると。 select 職員番号,氏名,max(点数) from tableA where レベル <= 4 /* レベルが文字列なら、'4' */ group by 職員番号,氏名 order by 職員番号,氏名 でレベル以外は求められます。 レベルは・・・同一職員番号で同一の点数が複数あってその点数がmaxだったときに、 レベルが異なるレコードが複数あれば何を出せばいいのかな? maxの点数のレベルのうち最大を出したければ以下。 select t1.職員番号,t1.氏名,max(t2.レベル),t1.点数 from ( select 職員番号,氏名,max(点数) from tableA where レベル <= 4 /* レベルが文字列なら、'4' */ group by 職員番号,氏名 ) t1,tableA t2 where t1.職員番号 = t2.職員番号 and t1.氏名 = t2.氏名 and t1.点数 = t2.点数 order by 職員番号,氏名 ※ select 職員番号,氏名,max(レベル),max(点数) from tableA group by 職員番号,氏名 としてしまうと、レベルと点数を別のレコードから持ってくるからご注意を。 例)レベル,点数が 1,4 2,3 とあると、こちらのsqlは、2,4とでたはず。

関連するQ&A