問題:
同じランクの行の後のランク付け位置をスキップして、レコードをランク付けしたい。
例:
私たちのデータベースには、championship 次の列にデータがあります:id (主キー)、user_name 、およびscore 。
| id | user_name | スコア |
| 111 | ジョン | 12 |
| 112 | メアリー | 23 |
| 115 | リサ | 45 |
| 120 | アラン | 23 |
| 221 | クリス | 23 |
すべてのユーザーの名前とスコアを降順で並べ替え、スコアでランク付けして表示しましょう。
ソリューション1:
SELECT RANK() OVER(ORDER BY score DESC) AS rank_place, user_name, score FROM championship;
このクエリは次のランキングを返します:
| rank_place | user_name | スコア |
| 1 | リサ | 45 |
| 2 | メアリー | 23 |
| 2 | アラン | 23 |
| 2 | クリス | 23 |
| 5 | ジョン | 12 |
ランク番号は1から5で、スコアの降順で並べ替えられていることに注意してください。
ディスカッション:
RANKを使用する 同じランクの行の後のランキング位置をスキップしたい場合。この例では、メアリー、アラン、クリスはすべて同じランク2でした。次の適格な位置は5です(同じランクの2 + 3行から計算されます)。