- PR -

PostgreSQL IDごとにRANKの最大値のデータを取得するようなSQL

1
投稿者投稿内容
くぷ
会議室デビュー日: 2006/09/01
投稿数: 13
投稿日時: 2007-02-20 16:45
いつも勉強させていただいております。

次のようなデータがあるとします。

ID | RANK | NAME
A |  1   | APPLE
A |  5   | APPLE
B |  3   | BANANA
B |  4   | BANANA
C |  6   | CHERRY
C |  2   | CHERRY
C |  7   | CHERRY

このテーブルから、IDごとでRANKの最大値を取得するようなSQL文を書きたいのですが、
どのように書けばよいでしょうか?以下のような取得結果です。

ID | RANK | NAME
A |  5   | APPLE
B |  4   | BANANA
C |  7   | CHERRY

もうかれこれ半日は悩んでいるのですが、なかなかうまくいかず投稿させていただくことにしました。
どなたか、お知恵を貸してください。
よろしくお願いいたします。
忠犬
大ベテラン
会議室デビュー日: 2006/05/01
投稿数: 109
投稿日時: 2007-02-20 23:36
バージョンによる実行可否があるかも知れませんが。。。

コード:
select * from t1
 where ("ID","RANK") in(
select "ID",max("RANK")
 from t1
 group by "ID"
)
order by "ID"


くぷ
会議室デビュー日: 2006/09/01
投稿数: 13
投稿日時: 2007-02-21 09:09
>忠犬様

こちらで、問題なく取得できました。

IN句は2つ以上の項目を指定することが出可能だったのですね!!!

大変勉強になりました。
誠にありがとうございました。
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2007-02-21 10:54
引用:

忠犬さんの書き込み (2007-02-20 23:36) より:
コード:
select * from t1
 where ("ID","RANK") in(
select "ID",max("RANK")
 from t1
 group by "ID"
)
order by "ID"




IDとRANKなUNIQUE制約がない場合に重複する可能性があるので、
DISTINCTした方がよいのでは?
1

スキルアップ/キャリアアップ(JOB@IT)