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

Cách xếp hạng qua phân vùng trong MySQL

Đôi khi bạn có thể cần xếp hạng qua phân vùng trong MySQL hoặc xếp hạng theo nhóm trong MySQL. Chúng ta sẽ xem xét cách xếp hạng qua phân vùng bằng cách sử dụng hàm xếp hạng MySQL. Bạn có thể sử dụng phương pháp này để xếp hạng trong từng nhóm / phân vùng trong một bảng riêng biệt. Tuy nhiên, xin lưu ý, chức năng này chỉ khả dụng trên MySQL 8.0.


Xếp hạng MySQL qua phân vùng

Chúng tôi sẽ sử dụng hàm MySQL RANK () để xếp hạng trong nhóm. Đây là cú pháp của hàm RANK trong MySQL.

RANK() OVER (
    PARTITION BY <expression>[{,<expression>...}]
    ORDER BY <expression> [ASC|DESC], [{,<expression>...}]
)

Hàm xếp hạng chỉ định thứ hạng cho mỗi hàng trong một phân vùng sao cho thứ hạng của mỗi hàng nhiều hơn tổng số hàng đã được xếp hạng trong phân vùng đó.

Trong cú pháp trên, mệnh đề PARTITION BY sẽ chia các hàng thành các phân vùng. Bạn có thể phân vùng bảng dựa trên một hoặc nhiều giá trị cột. Nếu không muốn phân vùng bảng, bạn chỉ cần bỏ qua hoàn toàn mệnh đề PARTITION BY.


Phần thưởng Đọc:Cách thay đổi múi giờ MySQL trong truy vấn

Chức năng Xếp hạng sẽ tính toán thứ hạng trong mỗi phân vùng / nhóm và khởi tạo lại số thứ hạng khi bắt đầu với một phân vùng mới.

Mệnh đề ORDER BY sắp xếp các hàng trong mỗi phân vùng dựa trên các giá trị trong một hoặc nhiều cột.


Phần thưởng Đọc:MySQL So sánh cơ sở dữ liệu

Hãy để chúng tôi nói rằng bạn có bảng sau.

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


Phần thưởng Đọc:MySQL Hiển thị Chỉ mục trong cơ sở dữ liệu

Đây là truy vấn để chỉ định thứ hạng cho từng hàng của bảng mà không sử dụng bất kỳ mệnh đề PARTITION BY nào.

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

Trong truy vấn trên, chúng tôi phân vùng bảng theo tên tháng, sau đó xếp hạng từng hàng trong mỗi phân vùng theo thứ tự số tiền giảm dần.

Hy vọng rằng bây giờ bạn có thể dễ dàng sử dụng chức năng Xếp hạng của MySQL để xếp hạng qua phân vùng và nhóm.

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. Mysql_real_escape_string () và mysql_escape_string () có đủ để bảo mật ứng dụng không?

  2. Máy chủ MySQL đã biến mất - trong đúng 60 giây

  3. 4 cách để kiểm tra kiểu dữ liệu của cột trong MySQL

  4. Cái nào nhanh hơn:nhiều CHÈN đơn hay một CHÈN nhiều hàng?

  5. Trả về bản ghi thứ n từ truy vấn MySQL