Mysql
 sql >> Base de données >  >> RDS >> Mysql

2 enregistrements aléatoires selon la position et l'ordre par position

Vous pouvez trier par position, rand() afin d'avoir un ordre aléatoire dans chaque position cloison. Utilisez ensuite la variable pour énumérer les enregistrements de position partition :

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 requête externe utilise @rn pour sélectionner seulement deux enregistrements de chaque position partitionner.

Démo ici