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

Поиск
Список
Период
Сортировка
От Alexey Klyukin
Тема Re: [pgsql-ru-general] Аггрегаторные функции: исключить NULL
Дата
Msg-id DCB7872C-5308-47D3-B665-7011C19E2FA1@me.com
обсуждение исходный текст
Список pgsql-ru-general
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


В списке pgsql-ru-general по дате отправления:

Предыдущее
От: "Dmitry E. Oboukhov"
Дата:
Сообщение: Re: Аггрегаторные функции: исключить NULL
Следующее
От: "Andrey N. Oktyabrski"
Дата:
Сообщение: Re: Аггрегаторные функции: исключить NULL