Mysql
 sql >> Datenbank >  >> RDS >> Mysql

zufällig 2 Datensätze nach Position und Reihenfolge nach Position

Sie können nach position, rand() sortieren um innerhalb jeder position eine zufällige Reihenfolge zu haben Partition. Verwenden Sie dann die Variable, um Datensätze von position aufzuzählen Partitionen:

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

Die äußere Abfrage verwendet @rn um nur zwei Datensätze von jeder position auszuwählen Partition.

Demo hier