Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Sắp xếp ORDER BY theo kết quả modulus (chia dư) trong MySQL

Để sắp xếp bản ghi dựa trên kết quả phép chia lấy dư (modulus) của một cột số, bạn dùng biểu thức modulus trực tiếp trong ORDER BY.

Ví dụ minh họa

Tạo bảng sinh viên:

mysql> create table DemoTable ( 
    StudentId int, 
    StudentName varchar(100) 
);

Chèn dữ liệu:

mysql> insert into DemoTable values(100,'Chris');
mysql> insert into DemoTable values(101,'Robert');
mysql> insert into DemoTable values(102,'David');
mysql> insert into DemoTable values(103,'Mike');

Hiển thị dữ liệu gốc:

mysql> select * from DemoTable;

Kết quả:

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 100       | Chris       |
| 101       | Robert      |
| 102       | David       |
| 103       | Mike        |
+-----------+-------------+

Truy vấn ORDER BY modulus 2 và 3

mysql> select StudentId, StudentName, StudentId % 2, StudentId % 3 
from DemoTable order by StudentId % 2, StudentId % 3;

Kết quả:

+-----------+-------------+---------------+---------------+
| StudentId | StudentName | StudentId % 2 | StudentId % 3 |
+-----------+-------------+---------------+---------------+
| 102       | David       | 0             | 0             |
| 100       | Chris       | 0             | 1             |
| 103       | Mike        | 1             | 1             |
| 101       | Robert      | 1             | 2             |
+-----------+-------------+---------------+---------------+

Giải thích:

  • StudentId % 2 (chia dư 2): 100→0, 101→1, 102→0, 103→1
  • StudentId % 3 (chia dư 3): 100→1, 101→2, 102→0, 103→1
  • ORDER BY %2, %3: Sắp xếp trước theo dư 2 (0 trước 1), trong nhóm dư 2=0 sắp theo dư 3 (0,1), nhóm dư 2=1 sắp theo dư 3 (1,2)
  • Thứ tự: (0,0)→102, (0,1)→100, (1,1)→103, (1,2)→101

Ứng dụng: Phân chia workload (sharding), round-robin assignment, alternating row styling, kiểm tra chẵn/lẻ.