Mysql
 sql >> Baza danych >  >> RDS >> Mysql

losowe 2 rekordy według pozycji i kolejności według pozycji

Możesz sortować według position, rand() tak, aby mieć losową kolejność w każdej position przegroda. Następnie użyj zmiennej, aby wyliczyć rekordy position partycje:

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

Zapytanie zewnętrzne używa @rn aby wybrać tylko dwa rekordy z każdej position partycja.

Pokaz tutaj



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy powinienem umieścić wartości EAV w tabeli typów danych?

  2. Podzapytanie zwracające więcej niż 1 wiersz

  3. Jak mogę używać SQL's YEAR(), MONTH() i DAY() w Doctrine2?

  4. Czas pobierania pliku w PHP/MySQL

  5. Znalezienie przeciętnego SQL