sql >> Base de Datos >  >> RDS >> Mysql

2 registros aleatorios según posición y orden por posición

Puede ordenar por position, rand() para tener un orden aleatorio dentro de cada position dividir. Luego use variable para enumerar registros de position particiones:

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 consulta externa usa @rn para seleccionar solo dos registros de cada position partición.

Demostración aquí