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を使用すると、データを数分で簡単に視覚化し、リアルタイムのダッシュボードで監視できます。今日お試しください。