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