[ Content | View menu ]

Агрегатные функции в PostgreSQL

Written on 12 May, 2008

Люблю Post­greSQL вот за такие вещи (думал написать сам, но погуглив нашел у 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.

No Comments

Write comment - TrackBack - RSS Comments

You have to be logged in to post a comment.