Bạn có thể sắp xếp theo position, rand() để có một thứ tự ngẫu nhiên trong mỗi position vách ngăn. Sau đó, sử dụng biến để liệt kê các bản ghi của position phân vùng:
SELECT q_id, position, qtn, level, rn
FROM (
SELECT q_id, position, qtn, level,
@rn := IF(@pos = position, @rn + 1,
IF(@pos := position, 1, 1)) AS rn
FROM (
SELECT *
FROM tbl_question
WHERE level = '1'
ORDER BY position, rand() ) a
CROSS JOIN (SELECT @rn := 0, @pos := 0) AS vars ) b
WHERE b.rn <= 2
ORDER BY position
Truy vấn bên ngoài sử dụng @rn để chỉ chọn hai bản ghi từ mỗi position phân vùng.