[pgsql-jp: 37422] Re: 一部のデータを SELECT した際に全体の順位取得

Hisahiro Kauchi hisahiro @ kid97.co.jp
2006年 8月 17日 (木) 15:37:01 JST


賀内と申します。

> TABLE名:ランキング
> 
> name|points
> -----------
> aa  |60
> bb  |80
> cc  |70
> dd  |40
> ee  |20
> 
> 
> SELECT * FROM ランキング OFFSET 2 LIMIT 2 ORDER BY points
> DESC;
> 
> name|points
> aa  |60
> dd  |40
> 
> が取得されると思いますが、「aa」が全体の何位かを取得する
> 事は出来ないでしょうか。
> 以下の様に取得するのが理想です。
> 
> name|points|rank
> aa  |60    |3
> dd  |40    |4

順位 =(自分より大きい points の人の数+1)と考えると、

 SELECT r1.name,r1.points,count(r2.*)+1 as rank
 FROM ランキング r1 LEFT JOIN ランキング r2 ON r1.points < r2.points
 GROUP BY r1.name,r1.points
 ORDER BY rank

と書けますよ。
これだと OFFSET / LIMIT も使えるし、同じ points の人がいても大丈夫です。




pgsql-jp メーリングリストの案内