MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLのRANK()関数とは?順位付けの基本を実例つきで解説

MySQLのRANK()関数とは

MySQLのRANK()関数は、結果セットのパーティション内にある各行に対して順位(ランキング)を割り当てるためのウィンドウ関数です。同じ値を持つ行には同じ順位が付き、その後の順位が飛ばされる(ギャップが生じる)のが大きな特徴です。

なお、RANK()関数はMySQL 8.0以降で利用できる機能です。それ以前のバージョンでは使用できないため、事前にバージョンを確認しておきましょう。

ここからは、実際にテーブルを作成し、RANK()関数の動きを段階的に確認していきます。

ステップ1:サンプルテーブルの作成

まず、順位付けの対象となるシンプルなテーブルを作成します。

mysql> create table RankDemo
    -> (
    -> id int
    -> );
Query OK, 0 rows affected (0.53 sec)

「id」というint型カラムを1つだけ持つ「RankDemo」テーブルが作成されました。

ステップ2:レコードの挿入

続いて、テーブルにテストデータを挿入します。あえて重複する値(3)を含めているのがポイントです。

mysql> insert into RankDemo values(1);
Query OK, 1 row affected (0.19 sec)

mysql> insert into RankDemo values(3);
Query OK, 1 row affected (0.12 sec)

mysql> insert into RankDemo values(3);
Query OK, 1 row affected (0.11 sec)

mysql> insert into RankDemo values(4);
Query OK, 1 row affected (0.12 sec)

mysql> insert into RankDemo values(5);
Query OK, 1 row affected (0.17 sec)

ステップ3:登録データの確認

SELECT文を使って、テーブル内のすべてのレコードを表示してみましょう。

mysql> select * from RankDemo;

実行結果は以下の通りです。

+------+
| id   |
+------+
|    1 |
|    3 |
|    3 |
|    4 |
|    5 |
+------+
5 rows in set (0.00 sec)

5件のレコードが登録されており、「3」が2行存在することが確認できます。

ステップ4:RANK()関数で順位を付ける

それでは、本題であるRANK()関数を適用してみましょう。OVER (ORDER BY id)のようにOVER句と組み合わせることで、idの昇順に基づいた順位を各行に付与できます。

mysql> SELECT
    ->   id,
    ->   RANK() OVER (ORDER BY id) AS Ranking
    -> FROM RankDemo;

実行結果は以下の通りです。

+------+---------+
| id   | Ranking |
+------+---------+
|    1 |       1 |
|    3 |       2 |
|    3 |       2 |
|    4 |       4 |
|    5 |       5 |
+------+---------+
5 rows in set (0.04 sec)

実行結果のポイント

出力結果を見ると、RANK()関数の特徴がよく分かります。

  • 値が「3」の2行には、どちらも同じ順位「2」が割り当てられています。
  • 同順位が2つあるため、次の「4」の順位は「3」ではなく「4」になっています。これがRANK()関数特有の「順位のギャップ」です。

補足:DENSE_RANK()との違い

似た動作をする関数にDENSE_RANK()があります。DENSE_RANK()の場合は同順位があっても次の順位が飛ばされず、「3」が2つ並んだ後に「4」は「3」という順位になります。連番のように隙間なく順位を付けたい場合はDENSE_RANK()を選ぶとよいでしょう。

このように、RANK()関数を使えばSQLだけで簡単にランキング処理を実現できます。売上ランキングやスコア集計など、順位が必要な場面でぜひ活用してください。

  1. MySQLで簡単な関数(CREATE FUNCTION)を作成する方法をわかりやすく解説

    MySQLでは、CREATE FUNCTIONコマンドを使用することで、独自の関数を自由に作成できます。本記事では、基本的な構文から実際の動作確認まで、具体例を交えながらステップバイステップで解説します。CREATE FUNCTIONの基本構文MySQLでユーザー定義関数を作成する場合、以下のような構文を使用します。delimiter //DROP FUNCTION if exists yourFunctionName;CREATE FUNCTION yourFunctionName(Parameter1,...N) returns typeBEGIN# 変数の宣言# MySQL文END //

  2. MySQLのSELECT文でIF()関数を使う方法【条件分岐の実例付き】

    MySQLのIF()関数は、指定した条件に基づいて値を返す関数です。条件が真(TRUE)の場合と偽(FALSE)の場合で、それぞれ異なる値を返すことができ、SELECT文の中で手軽に条件分岐を実現できます。 IF()関数の基本構文 IF()関数の構文は以下の通りです。 SELECT IF(条件, 条件が真の場合に返す値, 条件が偽の場合に返す値) FROM テーブル名; サンプルテーブルの作成 まず、動作確認用のテーブルを作成しましょう。 mysql> create table DemoTable ( Value int ); Query OK, 0 rows a