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

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

    問題:

    行の値が同じであっても、行に連続してランキング位置を追加したい。

    例:

    私たちのデータベースには、competition 次の列にデータがあります:id (主キー)、first_namelast_name 、およびscore

    id first_name last_name スコア
    11 ジョン トーマス 345
    14 メアリー ジョンソン 222
    16 リサ ブラウン 154
    23 アラン ブレイク 222
    32 クリス テイラー 154

    生徒に関するすべての詳細を表示しましょう。名前、名、スコアをscoreで並べ替えて表示します。 降順で。複数の生徒のスコアが同じ場合は、ポジション番号をスキップしたくありません。

    ソリューション1:

    SELECT DENSE_RANK() OVER(ORDER BY score DESC) AS d_rank,
      first_name,
      last_name,
      score
    FROM competition;
    

    ランクの範囲が1から3であることに注意してください。

    ディスカッション:

    DENSE_RANKを使用する 同じランクの行の後のランキング位置をスキップしたくない場合。この例では、メアリーとアランのランクは2ですが、リサの位置は3です。


    1. Oracle SQL:where句のタイムスタンプ

    2. SQL Server(T-SQL)で制約を削除する方法

    3. カウントにギャップを残してプライマリを自動インクリメント

    4. MSSQL CTEクエリをMySQLに変換する方法は?