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

Truy vấn MySQL lấy 5 bản ghi ngẫu nhiên từ 20 bản ghi gần nhất

Giới thiệu

Kết hợp ORDER BY ... DESC LIMIT 20 để lấy 20 bản ghi mới nhất, sau đó dùng ORDER BY RAND() LIMIT 5 để chọn 5 bản ghi ngẫu nhiên trong tập con đó.

Ví dụ thực hành

1. Tạo bảng DemoTable773

mysql> CREATE TABLE DemoTable773 (StudentId INT);

2. Chèn 23 bản ghi

mysql> INSERT INTO DemoTable773 VALUES (100),(200),(300),(400),(500),
    (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),
    (90),(91),(92),(93),(94),(95),(96),(97);

3. Truy vấn 5 bản ghi ngẫu nhiên từ 20 bản ghi cuối

mysql> SELECT * FROM (
    SELECT * FROM DemoTable773 ORDER BY StudentId DESC LIMIT 20
) AS RANDOM_OUTPUT ORDER BY RAND() LIMIT 5;

4. Kết quả mẫu (ngẫu nhiên mỗi lần chạy)

+-----------+
| StudentId |
+-----------+
|        95 |
|         4 |
|        10 |
|         7 |
|       300 |
+-----------+

Giải thích

  • Truy vấn con (subquery) sắp xếp giảm dần theo StudentId (giả sử ID tăng dần theo thời gian) và lấy 20 hàng đầu.
  • Bảng dẫn xuất RANDOM_OUTPUT sau đó được sắp xếp ngẫu nhiên bằng RAND() và lấy 5 hàng.
  • Cần alias cho bảng dẫn xuất (AS RANDOM_OUTPUT) theo yêu cầu MySQL.

Lưu ý hiệu suất

  • ORDER BY RAND() chậm trên tập dữ liệu lớn do phải tạo bảng tạm và sắp xếp.
  • Với dữ liệu lớn, hãy xem xét: lấy ID max/min, sinh số ngẫu nhiên ở ứng dụng, hoặc dùng TABLESAMPLE (MySQL 8.0+ không hỗ trợ, nhưng có thể mô phỏng).
  • Đảm bảo có index trên cột sắp xếp (StudentId) để subquery nhanh.