問題:
同じランクの行の後のランク付け位置をスキップして、レコードをランク付けしたい。
例:
私たちのデータベースには、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行から計算されます)。