Criar função no PostgreSQL GROUP_CONCAT equivalente ao GROUP_CONCAT MySQL

MySQL, PostgreSQL 1 Comment » Marcelo Korjenioski

Hoje estava pre­ci­sando con­ca­te­nar dados de um campo e des­co­bri que no Post­greSQL não existe uma fun­ção equi­va­lente ao group_concat do MySQL.

Exem­plo do MySQL

select GROUP_CONCAT(nome ORDER BY nome DESC SEPARATOR ',') as nomes from usuarios

Então pro­cu­rando na web encon­trei esta função.

MS SQL to Post­gre SQL


create aggregate array_accum (
sfunc = array_append,
basetype = anyelement,
stype = anyarray,
initcond = '{}'
);

CREATE OR REPLACE FUNCTION _group_concat(text, text)
RETURNS text AS $$
SELECT CASE
WHEN $2 IS NULL THEN $1
WHEN $1 IS NULL THEN $2
ELSE $1 operator(pg_catalog.||) ',' operator(pg_catalog.||) $2
END
$$ IMMUTABLE LANGUAGE SQL;

CREATE AGGREGATE group_concat (
BASETYPE = text,
SFUNC = _group_concat,
STYPE = text
);

Para exe­cu­tar a fun­ção basta usar.

select group_concat(distinct nome) as nomes from usuarios

Caso tenha alguma duvida ou suges­tão deixe um comen­tá­rio que terei pra­zer em aju­dar.
Comen­tá­rios são bem vin­dos assim posso melho­rar a qua­li­dade dos tuto­ri­ais aqui apresentados.

É isso pes­soal uma ótima semana e até o próximo post.

Designed by NattyWP Wordpress Themes.
Images by desEXign.