- 締切済み
検索方法
簡単なSQLなように思えるのですがどのように検索したらよいか分からずに困っています。 どなたか分かる人がいましたら教えてください。 テーブル No(PK) 役職 年齢 給与 ------------------------ 0001 課長 44 300000 0002 次長 33 400000 ・・・ ・・・ 各役職者で年齢が一番高い人の中で一番給与が高い人のNoを検索したいのですがシンプルにSQL分って作れるのでしょうか? ちなみにoracleは10Gです
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- nora1962
- ベストアンサー率60% (431/717)
select t.No,t.役職,t.年齢,t.給与 from (select No,役職,年齢,給与, rank() over( partition by 役職 order by 年齢 desc, 給与 desc ) rank from テーブル ) t where rank=1;
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
select * from ( select x.*,rank() over(partition by 役職 order by 給与 desc) R from テーブル x ) where R=1; とか select * from テーブル where (役職,給与) in (select 役職,max(給与) from テーブル group by 役職) ; で良いと思いますが..
- whiteline507
- ベストアンサー率63% (47/74)
手元に環境が無いので自信は無い&とんどもなく効率が悪いですが、とりあえずこんな感じで出せるはずです。 10gだったらcube関連関数でもっとシンプルにSQLが書けるかもしれません。 ネストが深いサブクエリから追っていけば何をしたいかがだいたい分かるかと思います。 select * from 社員表 c, (--役職ごとの最高年齢の人の最高給与を表示 select 役職,年齢,max(給与) 給与 from (--役職ごとの最高年齢の人の全てのカラムを表示 select * from 社員表 a, (--役職ごとの最高年齢を表示 select 役職,max(年齢) 年齢 from table group by 役職 ) b where a.役職=b.役職 and a.年齢=b.年齢 ) group by 役職,年齢 ) d where c.役職=d.役職 and c.年齢=d.年齢 and c.給与=d.給与 ;