Обсуждение: Re: [pgsql-ru-general] Аггрегаторные функции: исключить NULL

Поиск
Список
Период
Сортировка

Re: [pgsql-ru-general] Аггрегаторные функции: исключить NULL

От
Alexey Klyukin
Дата:
On Nov 14, 2011, at 1:01 PM, Dmitry E. Oboukhov wrote:

> SELECT
>    "t1".id,
>    COUNT("t2"."id") AS "count",
>    array_agg("t2"."id") AS "ids"
> FROM
>    "t1"
> LEFT JOIN "t2" ON "t2"."t1_id" = "t1"."id"
> 
> GROUP BY
>    "t1"."id"
> 
> Возвращает
> 
> id | count |       ids |
> 1 |     0 |    {NULL} |
> 2 |     2 |     {2,6} |
> 3 |     4 | {1,2,3,4} |
> 
> 
> Есть ли простой способ в третьем столбике исключить {NULL}?

Что если добавлять значения в строку (используя разделитель, которого заведомо нет в исходных данных), а потом
разворачиватьих обратно в массив?
 
regexp_split_to_array(string_agg("t2".id,','),',') as "ids"

Более производительный и надежный способ написать свою агрегирующую функцию:
см. http://www.postgresql.org/docs/current/static/sql-createaggregate.html.
sfunc в данном случае должна просто вызывать array_append для не-нулевых данных.



/A