Truy vấn bản ghi ngẫu nhiên theo nhiều tiêu thức trong SQL Server

Em chào mọi người ạ. Em có một bảng Câu hỏi được thiết kế như trong hình. Mong muốn của em là lấy ra được mảng câu hỏi thoả mãn điều kiện: Vd: Mảng gồm 40 câu hỏi trong đó sẽ lấy ngẫu nhiên nhưng vẫn đảm bảo mỗi chương có ít nhất 1 câu hỏi và với mức độ dễ, tb, khó theo tỷ lệ ( 25, 10, 5). M.n hỗ trợ em với ạ. Em cảm ơn ạ

image

Tớ đưa ra một số giả thiết cho bài toán của cậu để làm đơn giản mọi thứ trước:

  • Cậu có ít hơn 40 chương cho mỗi môn học.
  • Cậu có đủ câu hỏi dễ - vừa - khó trong pool cho từng chương
  • Cậu kỳ vọng các câu hỏi khó - vừa - dễ sẽ dàn đều ra các chương, tức là số lượng chương mà câu hỏi khó - vừa - dễ cover là nhiều nhất có thể.

Sẽ có nhiều cách để làm, cơ mà cậu có thể làm theo chiến lược đơn giản dưới đây xem:

  • Chọn ra 5 câu hỏi khó cho min(5, max(số chương)) chương.
    Cậu có thể random ra các chương sẽ lấy câu hỏi, rồi tìm random câu hỏi trong CSDL.
  • Chọn ra 10 câu hỏi vừa cho min(10, max(số chương còn lại)).
    Nếu cậu đã chọn hết chương rồi mà vẫn còn slot cho câu hỏi vừa, cậu random chọn câu hỏi vừa còn lại.
  • Chọn ra 25 câu hỏi dễ cho min(25, max(số chương còn lại)) chương.
    Nếu cậu đã chọn hết chương rồi mà vẫn còn slot cho câu hỏi vừa, cậu random chọn câu hỏi dễ còn lại.

Đây là cách để cậu chọn random một record ở sql server.

SELECT TOP 1 column FROM table
WHERE <điều kiện lọc của cậu>
ORDER BY NEWID()

Cậu kết hợp các hướng dẫn ở trên và implement thử nhé!

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?