Агрегация в Clickhouse
Есть ли в Clickhouse аналог array_agg из PostgreSQL? Пытаюсь получить из таблицы:
id text pid date
1 "Текст1" 1 "2020-01-01"
2 "Текст2" 3 "2010-01-01"
3 "Текст1" 2 "2020-10-01"
4 "Текст1" 3 "2015-07-03"
5 "Текст2" 4 "2014-09-07"
таблицу:
text min_date max_date array_agg
"Текст1" "2015-07-03" "2020-10-01" {1,2,3}
"Текст2" "2010-01-01" "2014-09-07" {3,4}
В postgresql работает запрос select text, min(date), max(date), array_agg(pid) from table group by text. С Clickhouse как это заменить - непонятно.
Читал про -ForEach, но он вроде просто преобразует агрегатную функцию.
Ответы (2 шт):
Посмотрите на данную функцию.
groupUniqArray
Синтаксис: groupUniqArray(x) или groupUniqArray(max_size)(x)
Составляет массив из различных значений аргумента. Расход оперативной памяти такой же, как у функции uniqExact.
Функция groupUniqArray(max_size)(x) ограничивает размер результирующего массива до max_size элементов. Например, groupUniqArray(1)(x) равнозначно [any(x)].
Скорее подходит функция groupArray:
select text, min(date), max(date), groupArray(pid) array_agg
from table
group by text