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

From: Alexey Klyukin <alexeyk(at)me(dot)com>
To: "Dmitry E(dot) Oboukhov" <unera(at)debian(dot)org>
Cc: pgsql-ru-general(at)postgresql(dot)org
Subject: Re: [pgsql-ru-general] Аггрегаторные функции: исключить NULL
Date: 2011-11-16 15:02:10
Message-ID: DCB7872C-5308-47D3-B665-7011C19E2FA1@me.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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

In response to

Browse pgsql-ru-general by date

  From Date Subject
Next Message Andrey N. Oktyabrski 2011-11-16 20:00:02 Re: Аггрегаторные функции: исключить NULL
Previous Message Dmitry E. Oboukhov 2011-11-16 13:15:56 Re: Аггрегаторные функции: исключить NULL