Дайте свои вопросы номерам: 1, 2, 3, 4, 5 ... n.Затем разделите на 3, отклонив остальные: 0, 0, 0, 1, 1, ... n / 3, чтобы получить группы по три.Вам решать, как нумеровать вопросы, например, по идентификатору (наименьший идентификатор - запись № 1, следующий идентификатор - запись № 2, ...) или случайным образом.Вот пример для случайного:
select *, (row_number() over (order by random()) - 1 ) / 3 as grp
from questions
order by grp;
Сохраните результат как есть или поверните его, чтобы получить одну строку на группу с тремя столбцами вместо этого, например,
select
max(case when rn % 3 = 0 then q end) as q1,
max(case when rn % 3 = 1 then q end) as q2,
max(case when rn % 3 = 2 then q end) as q3
from
(
select *, row_number() over (order by random()) - 1 as rn
from questions
) numbered
group by rn / 3
order by rn / 3;