sql >> データベース >  >> RDS >> Database

RANK()を使用してSQLの行のランキング位置を追加する方法

    問題:

    同じランクの行の後のランク付け位置をスキップして、レコードをランク​​付けしたい。

    例:

    私たちのデータベースには、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行から計算されます)。


    1. SQL ServerでSAアカウントの名前を変更します(T-SQLの例)

    2. ORA-12505を修正する方法、TNS:listenerは現在、接続記述子で指定されたSIDを認識していません

    3. java.sql.SQLException:jdbc:microsoft:sqlserverに適したドライバーが見つかりません

    4. PostgreSQLのarray_agg関数をSQLiteに変換する方法は?