Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

2 registros aleatórios de acordo com a posição e ordem por posição


Você pode classificar por position, rand() para ter uma ordem aleatória dentro de cada position partição. Em seguida, use a variável para enumerar registros de position partições:
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

A consulta externa usa @rn para selecionar apenas dois registros de cada position partição.

Demonstração aqui