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

MYSQL Chọn một bản ghi ngẫu nhiên từ mỗi Danh mục

Truy vấn này trả về tất cả các mục được kết hợp vào danh mục theo thứ tự ngẫu nhiên:

SELECT
c.id AS cid, c.category, i.id AS iid, i.name
FROM categories c
INNER JOIN items i ON c.id = i.category
ORDER BY RAND()

Để hạn chế từng danh mục thành một, hãy bọc truy vấn thành một phần GROUP BY :

SELECT * FROM (
    SELECT
    c.id AS cid, c.category, i.id AS iid, i.name
    FROM categories c
    INNER JOIN items i ON c.id = i.category
    ORDER BY RAND()
) AS shuffled_items
GROUP BY cid

Lưu ý rằng khi truy vấn có cả GROUP BYORDER BY mệnh đề, việc nhóm được thực hiện trước khi sắp xếp. Đây là lý do tại sao tôi đã sử dụng hai truy vấn:truy vấn đầu tiên sắp xếp kết quả, truy vấn thứ hai nhóm kết quả.

Tôi hiểu rằng truy vấn này sẽ không giành chiến thắng trong bất kỳ cuộc đua nào. Tôi sẵn sàng đón nhận các đề xuất.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Không thể thêm trường ... kích thước hàng ... lớn hơn kích thước tối đa cho phép

  2. MySql:Hiển thị các cột nhưng loại trừ mọi thứ ngoại trừ tên trường

  3. Làm thế nào để thực thi ràng buộc duy nhất trong MySQL?

  4. Cập nhật bảng đã tham gia qua SQLAlchemy ORM sử dụng session.query

  5. mysql:làm cách nào để lưu ORDER BY sau LEFT JOIN mà không cần sắp xếp lại?