Mysql
 sql >> Database >  >> RDS >> Mysql

2 record casuali in base alla posizione e ordine per posizione

Puoi ordinare per position, rand() in modo da avere un ordine casuale all'interno di ogni position partizione. Quindi usa la variabile per enumerare i record di position partizioni:

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

La query esterna utilizza @rn per selezionare solo due record da ciascuna position partizione.

Dimostrazione qui