Обсуждение: aggregate...

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

aggregate...

От
Mathieu Arnold
Дата:
Hi

I have this :

CREATE FUNCTION "comma_cat" (text,text) RETURNS text AS '
SELECT CASE WHEN $2 IS NULL OR $2 = '''' THEN $1           WHEN $1 IS NULL OR $1 = '''' THEN $2           ELSE $1 ||
'','' || $2      END
 
' LANGUAGE 'sql';


CREATE AGGREGATE list ( BASETYPE = text, SFUNC = comma_cat, STYPE = text, 
INITCOND = '' );

I can use it as :
select user, list(email) from user join email using (id_user);

user   | list
-------+-----------------------------
mat    | mat@mat.cc, mat@absolight.fr
isa    | isa@mat.cc

but now, I'd like a better version of this function/aggregate couple which 
would allow me to do something like :

select user, list(email, ',') from user join email using (id_user);

user   | list
-------+-----------------------------
mat    | mat@mat.cc,mat@absolight.fr
isa    | isa@mat.cc

or :

select user, list(email, '|') from user join email using (id_user);

user   | list
-------+-----------------------------
mat    | mat@mat.cc|mat@absolight.fr
isa    | isa@mat.cc

I know I'd have to modify the function to take a third argument (easy) but 
I don't know how to use a 2 argument aggregate (I don't even know if it's 
possible).

-- 
Mathieu Arnold


Re: aggregate...

От
Tom Lane
Дата:
Mathieu Arnold <mat@mat.cc> writes:
> I don't know how to use a 2 argument aggregate (I don't even know if it's 
> possible).

We don't have any support for multi-argument aggregates.  I don't think
it's impossible to do, but it would take some hacking.
        regards, tom lane