sql >> Database >  >> RDS >> Mysql

willekeurige 2 records volgens positie en volgorde per positie

U kunt sorteren op position, rand() om een ​​willekeurige volgorde te hebben binnen elke position partitie. Gebruik vervolgens variabele om records van position op te sommen partities:

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

De buitenste query gebruikt @rn om slechts twee records te selecteren van elke position partitie.

Demo hier



  1. MySQL-databaseverbinding niet gesloten:wat gebeurt er?

  2. Shapefiles importeren in postgresql in linux met pgadmin 4

  3. At-Sign in SQL-instructie vóór kolomnaam

  4. Configuratie voor transactiereplicatie van SQL Server