Не всегда нужно группировать записи таблиц в рамках какого-то повторяющегося значения столбца. Иногда нужно просто сгруппировать значения полей по 10 записей или по 1000. При этом все значения могут быть уникальными. Как это сделать?
select array_agg(userid) as usersArray, string_agg(userid::text, '; ') as usersText from ( select U.userid, U.userid/10*10 as grouprank from generate_series(744, 5487) as U(userid) ) group by grouprank;
Итоговая таблица со сгруппированными записями по 10 штук.

Как это работает?
Деление на целое возвращает целое. Это значит, что при делении 4792 на 10 мы получим не «479,2», а «479».
select 4792/10; -- 479
Если мы будем делить любое число в рамках двух разрядов на 10, то у нас будут повторяться ровно по 10 одинаковых значений.
Чтобы сохранить близость оригинального числа к своей новой группе, мы дополнительно умножаем результат деления на 10. То есть на что делили, на то и умножаем. Потом может пригодиться в визуализации.
Функцию «generate_series()» мы использовали для имитации данных таблицы.