MySQLでパーティションをランク付けしたり、MySQLでグループ化されたランク付けを行う必要がある場合があります。 MySQLランク関数を使用してパーティションをランク付けする方法を見ていきます。このアプローチを使用して、テーブル内の各グループ/パーティション内で個別にランク付けできます。ただし、この関数はMySQL8.0からのみ使用できることに注意してください。
MySQLランクオーバーパーティション
MySQL RANK()関数を使用して、グループ内でランク付けします。 MySQLRANK関数の構文は次のとおりです。
RANK() OVER (
PARTITION BY <expression>[{,<expression>...}]
ORDER BY <expression> [ASC|DESC], [{,<expression>...}]
)> ランク関数は、各行のランクがそのパーティションでランク付けされた行の総数より1つ多くなるように、パーティション内の各行にランクを割り当てます。
上記の構文では、PARTITIONBY句は行をパーティションに分割します。 1つ以上の列の値に基づいてテーブルをパーティション化できます。テーブルをパーティション分割したくない場合は、PARTITIONBY句を完全に省略できます。
ボーナスリード:クエリでMySQLのタイムゾーンを変更する方法
ランク関数は、各パーティション/グループ内のランクを計算し、新しいパーティションで開始するときにランク番号を再初期化します。
ORDER BY句は、1つ以上の列の値に基づいて各パーティション内の行を並べ替えます。
ボーナスリード:MySQLCompareデータベース
次の表があるとしましょう。
mysql> create table for_rank(id int, month varchar(10),amount int);
mysql> insert into for_rank(id, month, amount)
values(1,'Jan',450),
(2,'Jan',350),
(3,'Jan',250),
(4,'Feb',150),
(5,'Feb',450),
(6,'Feb',500),
(7,'Mar',350),
(8,'Mar',450),
(9,'Mar',250),
(10,'Mar',150);
mysql> select * from for_rank;
+------+-------+--------+
| id | month | amount |
+------+-------+--------+
| 1 | Jan | 450 |
| 2 | Jan | 350 |
| 3 | Jan | 250 |
| 4 | Feb | 150 |
| 5 | Feb | 450 |
| 6 | Feb | 500 |
| 7 | Mar | 350 |
| 8 | Mar | 450 |
| 9 | Mar | 250 |
| 10 | Mar | 150 |
+------+-------+--------+
ボーナスリード:データベース内のMySQL表示インデックス
PARTITION BY句を使用せずに、テーブルの各行にランクを割り当てるクエリを次に示します。
SELECT
id, month, amount, RANK() OVER (
PARTITION BY Month
ORDER BY amount desc
) my_rank
FROM for_rank;
+------+-------+--------+--------+
| id | month | amount | rank |
+------+-------+--------+--------+
| 6 | Feb | 500 | 1 |
| 5 | Feb | 450 | 2 |
| 4 | Feb | 150 | 3 |
| 1 | Jan | 450 | 1 |
| 2 | Jan | 350 | 2 |
| 3 | Jan | 250 | 3 |
| 8 | Mar | 450 | 1 |
| 7 | Mar | 350 | 2 |
| 9 | Mar | 250 | 3 |
| 10 | Mar | 150 | 4 |
+------+-------+--------+--------+
上記のクエリでは、テーブルを月の名前でパーティション化し、各パーティション内の各行を金額の降順でランク付けします。
うまくいけば、MySQLランク関数を使用してパーティションとグループを簡単にランク付けできるようになりました。
Ubiqを使用すると、データを数分で簡単に視覚化し、リアルタイムのダッシュボードで監視できます。今日お試しください。