Выборка рандомной строки каждого типа
Есть схема таблицы следующего вида:
Необходимо построить выборку, чтобы каждый запрос выдавал рандомные строки группируя по number_task. Я попробовал сделать что-то типа такого:
SELECT number_task, task FROM informatica GROUP BY number_task, task ORDER BY random() limit 2;
Но это не дало нужного эффекта.
Для примера.
Даны данные:
О.Р. Различные вариации типа:
Задание 1 | 1
Задание 2 | 2
Главное, чтобы number_task в результате выборки был уникален.
UPDATE: Вывел EXPLAIN для запроса (схема таблицы обновлена):
EXPLAIN (ANALYSE ,BUFFERS ) SELECT * FROM (SELECT tasks.*, row_number over (partition by type order by random()) as seqnum from tasks WHERE subject_id = 2 AND status = true) as inf where seqnum = 1
10 миллионов записей
Но никак не получается оптимизировать его.
Ответы (2 шт):
Автор решения: Sergey Moiseenko
→ Ссылка
SELECT distinct number_task,
first_value(task) over(partition by number_task order by random())
FROM informatica limit 2;
Автор решения: STAJLb
→ Ссылка
Мой вариант решения:
SELECT id, task, number_task FROM (SELECT informatica.*, row_number() over
(partition by number_task order by random()) as seqnum from informatica)
as inf where seqnum = 1;


