【SQL】データを順位づけするRANK関数の使い方を解説!
  • facebookページ
  • twitterページ
  • 2020.06.03

    【SQL】データを順位づけするRANK関数の使い方を解説!

    RANK関数とは?

    RANK関数とは、SQLクエリで取得した結果セットの各データに順位をつけて返す関数のことです。

    データの順位は、1から順に振られます。

    RANK関数とROW_NUMBERは似ていますが、ROW_NUMBERがすべてのデータに一意に番号をつけるのに対し、RANK関数は同順位に対して同じ番号をつけます。

    それぞれの違いは次の記事で解説していますので、参考にしてみてください。

    【関連記事】

    ▶︎【SQL】PARTITION BYの基礎から列ごとの計算方法まとめ

    RANK関数(RANK OVER)の使い方

    RANK関数は次の書式で使用します。

    サンプルで実際の動きも確認してみましょう。

    生徒の成績が登録してあるstudentテーブルが次のようになっているとします。

    このテーブルをscoreの高い順に並び替え、順位づけするには次のように記述しましょう。

    同じscoreの場合には同じ順位が振られているのがわかりますね。

    RANK関数でWHERE句を使って、TOP3を出力する

    例えば、scoreの高い上位3位を取得したい場合などは、RANK関数とWHERE句を組み合わせることで出力できます。

    先ほどのテーブルを使って確認してみましょう。

    記述方法は次のようになります。

    RANK関数の使い方で紹介したSQLクエリを「SELECT s.* FROM()」に記述しています。

    順位づけした状態で、studentテーブルのランクをWHERE句で3以下(1,2,3)だけ取得すればOKです。

    表示結果は次のようになります。

    ランクづけできる関数まとめ

    データに順位をつける方法は、RANK関数以外にもあります。

    ここでは、RANK関数以外に次の2つを紹介します。

    • DENSE_RANK関数
    • ROW_NUMBER関数

    DENSE_RANK関数とは?

    DENSE_RANK関数とは、RANK関数とは異なり順位づけした番号をスキップしない関数のことです。

    書式や順位付けについては RANK関数とほぼ同じになります。

    DENSE_RANK関数の使い方

    先ほどのテーブルで動作を確認してみましょう。

    RANK()の部分をDENSE_RANK()にすればOKです。

    同列の4の次に5がつけられています。

    ROW_NUMBER関数とは?

    ROW_NUMBER関数は、RANK関数の部分でも少し説明したように、同率順位であっても同じ順位にはならず、順位を個別でカウントする関数です。

    書式はRANK関数とほぼ同じになります。

    ROW_NUMBER関数の使い方

    ROW_NUMBER関数も、先ほどのテーブルを使って動作を確認してみましょう。

    RANK()の部分をROW_NUMBER()にすればOKです。

    同率のscoreがあっても、一意に順位が振られています。

    「78」で同率になっている部分はNoが「1→7」の順番になっていますよね。

    この部分、Noが大きい「7→1」にしたい場合もあるかもしれません。

    このように同率の順位の表示を変えたい場合は、ORDER BY句にNoを追加します。

    これで同率順位があってもNoが降順になるように表示されました。

    scoreが「59」のNoも「8→5」の順番になっています。

    まとめ

    SQLのRANK関数について解説しました。

    RANK関数は、各データに順位をつけて返す関数のことです。

    RANK関数以外にも、DENSE_RANK関数、ROW_NUMBER関数など順位づけできる関数があります。

    ぜひこの記事を参考に、SQLのRANK関数や順位づけについてマスターしてください!



    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE