Агрегатные функции в PostgreSQL
Written on 12 May, 2008
Люблю PostgreSQL вот за такие вещи (думал написать сам, но погуглив нашел у Torchbox):
CREATE AGGREGATE to_array (
sfunc = array_append,
basetype = anyelement,
stype = anyarray,
initcond = '{}'
)
Теперь существует агрегатная функция to_array(), которая превращает выбраный столбец в массив.
Например, из таблицы:
col_a | col_b -------+------- a | 1 a | 2 a | 3 b | 1 b | 5 b | 12
по запросу
SELECT col_a, to_array(col_b) FROM sometable GROUP BY col_a; вернется
col_a | to_array
-------+----------
b | {1,5,12}
a | {1,2,3}
Массив можно легко перевести в строку с помощью array_to_string(anyarray, text) и тогда по запросу
SELECT col_a, array_to_string(to_array(col_b), '; ') FROM sometable GROUP BY col_a;
получается красота вроде:
col_a | array_to_string -------+----------------- b | 1; 5; 12 a | 1; 2; 3
В обратную сторону, кстати тоже можно :)
Filed in: SQL.