sql >> データベース >  >> RDS >> Mysql

MySQLでrow_numberを取得する方法

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

    1. psql(PostgreSQL)でクエリを実行するときにNull値を表示する方法

    2. アップグレードされたdbForgeStudiofor MySQL、v.8.1でのMariaDB10.4のサポート

    3. SQL Developerでデフォルトのスキーマを変更するにはどうすればよいですか?

    4. 高可用性のためのMySQLのハイブリッドクラウドレプリケーション