В стандартном SQL вы можете использовать ROW_NUMBER
для нумерации строк в нужном вам порядке, например, по идентификатору. Затем в вашем предложении ORDER BY
сначала упорядочите блоки (строки 1-9, 10, 11-19, 20, 21), а затем перемешайте блоки внутри блоков, используя случайную функцию.
Следующее MySQL . Начиная с версии 8, он поддерживает ROW_NUMBER()
. Его случайная функция называется RAND()
. В других СУБД может быть другая функция для получения случайного числа.
select t.*,
from mytable
order by
case
when row_number() over (order by id) <= 9 then 1
when row_number() over (order by id) = 10 then 2
when row_number() over (order by id) < 20 then 3
when row_number() over (order by id) = 20 then 4
when row_number() over (order by id) = 21 then 5
else 6
end,
rand();