PostgreSQL | Группировка по 10 записей

PostgreSQL | Группировка по 10 записей

Не всегда нужно группировать записи таблиц в рамках какого-то повторяющегося значения столбца. Иногда нужно просто сгруппировать значения полей по 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 штук.

Группировка по 10 записей - PostgreSQL
Группировка по 10 записей — PostgreSQL

Как это работает?

Деление на целое возвращает целое. Это значит, что при делении 4792 на 10 мы получим не «479,2», а «479».

select 4792/10; -- 479

Если мы будем делить любое число в рамках двух разрядов на 10, то у нас будут повторяться ровно по 10 одинаковых значений.

Чтобы сохранить близость оригинального числа к своей новой группе, мы дополнительно умножаем результат деления на 10. То есть на что делили, на то и умножаем. Потом может пригодиться в визуализации.

Функцию «generate_series()» мы использовали для имитации данных таблицы.