レポートと分析のために、MySQLで行番号を取得する必要がある場合があります。行番号は、データのランク付けと並べ替えに非常に役立ちます。行番号の値に基づいてデータをフィルタリングする場合にも役立ちます。この記事では、 row_numberを取得する方法を見ていきます。 MySQLで。
MySQLでrow_numberを取得する方法
Row_number()関数は、MySQL8.0以降ですぐに使用できます。
row_number()の構文は次のとおりです。 構文。 PARTITIONBY句はオプションであることに注意してください。
ROW_NUMBER() OVER ( PARTITION BY <expression(s)> ORDER BY <expression(s)> [ASC|DESC])
次の販売があるとしましょう テーブル。
+------+------------+--------+ | id | order_date | amount | +------+------------+--------+ | 1 | 2021-01-01 | 200 | | 2 | 2021-01-02 | 250 | | 3 | 2021-01-03 | 220 | | 4 | 2021-01-04 | 230 | | 5 | 2021-01-05 | 210 | | 6 | 2021-01-06 | 100 | | 7 | 2021-01-07 | 120 | | 8 | 2021-01-08 | 150 | | 9 | 2021-01-09 | 180 | | 10 | 2021-01-10 | 200 | +------+------------+--------+
row_numberの使用例を次に示します。 金額の降順で行をランク付けする関数 桁。
mysql> select row_number() over ( order by amount desc) row_num, amount from sales order by amount desc; +---------+--------+ | row_num | amount | +---------+--------+ | 1 | 250 | | 2 | 230 | | 3 | 220 | | 4 | 210 | | 5 | 200 | | 6 | 200 | | 7 | 180 | | 8 | 150 | | 9 | 120 | | 10 | 100 | +---------+--------+
上記のクエリでは、テーブル全体を単一のパーティションとして扱い、PARTITIONBY句を提供していません。また、これらの行を金額列の降順で並べ替え、 row_number()を使用します。 これらの行をランク付けする関数。
ただし、MySQL <8.0を使用している場合は、 row_numberを取得する手順は次のとおりです。 MySQLで。
mysql> SELECT t.*, @rownum := @rownum + 1 AS rank FROM sales t, (SELECT @rownum := 0) r order by amount desc; +------+---------------------+--------+------+ | id | order_date | amount | rank | +------+---------------------+--------+------+ | 1 | 2021-02-02 08:15:00 | 250 | 1 | | 10 | 2021-02-02 11:15:00 | 250 | 2 | | 5 | 2021-02-02 09:30:00 | 250 | 3 | | 9 | 2021-02-02 10:45:00 | 200 | 4 | | 12 | 2021-02-02 11:45:00 | 200 | 5 | | 6 | 2021-02-02 09:45:00 | 200 | 6 | | 2 | 2021-02-02 08:30:00 | 200 | 7 | | 7 | 2021-02-02 10:15:00 | 180 | 8 | | 3 | 2021-02-02 08:55:00 | 150 | 9 | | 11 | 2021-02-02 11:30:00 | 150 | 10 | | 4 | 2021-02-02 09:15:00 | 125 | 11 | | 8 | 2021-02-02 10:30:00 | 125 | 12 | +------+---------------------+--------+------+
上記のSQLクエリでは、一時変数 rownumを使用します。 行番号を格納します。 MySQLが行を順番にトラバースするとき、 rownumを割り当てます。 各行に段階的に追加します。
MySQL用のレポートツールが必要ですか? Ubiqを使用すると、データを数分で簡単に視覚化し、リアルタイムのダッシュボードで監視できます。今日それを試してみてください!