sql >> Databasteknik >  >> RDS >> Mysql

slumpmässigt 2 poster enligt position och ordning för position

Du kan sortera efter position, rand() för att ha en slumpmässig ordning inom varje position dela. Använd sedan variabel för att räkna upp poster av position partitioner:

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

Den yttre frågan använder @rn för att välja bara två poster från varje position partition.

Demo här



  1. PHP kort unikt ID-generering med auto_increment?

  2. Anslut till två databaser

  3. Välj grupp med rader som matchar alla objekt i en lista

  4. rails mysql-adapterfel