[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 メーリングリストの案内