Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách lấy row_number trong MySQL

Đôi khi bạn có thể cần lấy số hàng trong MySQL để báo cáo và phân tích. Số hàng rất hữu ích trong việc xếp hạng và sắp xếp dữ liệu. Nó cũng hữu ích trong việc lọc dữ liệu dựa trên giá trị số hàng. Trong bài viết này, chúng ta sẽ xem xét cách lấy row_number trong MySQL.


Cách lấy row_number trong MySQL

Hàm Row_number () có sẵn kể từ MySQL 8.0.

Đây là cú pháp của row_number () cú pháp. Xin lưu ý, điều khoản PARTITION BY là tùy chọn.

ROW_NUMBER() OVER (
     PARTITION BY <expression(s)> 
     ORDER BY <expression(s)> [ASC|DESC])

Hãy để chúng tôi nói rằng bạn có doanh số bán hàng sau bảng.

 +------+------------+--------+
 | 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 |
 +------+------------+--------+

Đây là một ví dụ về việc sử dụng row_number chức năng xếp hạng các hàng theo thứ tự giảm dần của số lượng cột.

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 |
 +---------+--------+

Trong truy vấn trên, chúng tôi coi toàn bộ bảng như một phân vùng duy nhất và không cung cấp mệnh đề PARTITION BY. Chúng tôi cũng sắp xếp các hàng này theo thứ tự giảm dần theo cột số tiền và sử dụng row_number () chức năng xếp hạng các hàng này.

Tuy nhiên, nếu bạn đang sử dụng MySQL <8.0 thì đây là các bước để lấy row_number trong 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 |
 +------+---------------------+--------+------+

Trong truy vấn SQL ở trên, chúng tôi sử dụng một biến tạm thời rownum để lưu trữ số hàng. Khi MySQL tuần tự đi ngang qua các hàng, nó sẽ gán rownum đến từng hàng theo cách tăng dần.

Cần một công cụ báo cáo cho MySQL? Ubiq giúp dễ dàng trực quan hóa dữ liệu trong vài phút và theo dõi trong trang tổng quan thời gian thực. Thử nó ngay hôm nay!

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mẹo nhanh về MySQL:Sử dụng lệnh DROP USER

  2. Làm cách nào để tạo một chỉ mục vào phần ngày của trường DATETIME trong MySql

  3. Lỗi MySQL 1093 - Không thể chỉ định bảng đích để cập nhật trong mệnh đề FROM

  4. Thủ tục được lưu trữ với các tham số WHERE tùy chọn

  5. Cài đặt Neo4j