Re: LISTAGG à la Oracle in PostgreSQL

From: Juan Rodrigo Alejandro Burgos Mella <rodrigoburgosmella(at)gmail(dot)com>
To: Pierre Forstmann <pierre(dot)forstmann(at)gmail(dot)com>
Cc: "pgsql-general(at)lists(dot)postgresql(dot)org" <pgsql-general(at)lists(dot)postgresql(dot)org>
Subject: Re: LISTAGG à la Oracle in PostgreSQL
Date: 2026-03-10 08:45:27
Message-ID: CAHbZ42wBt2-C6i3520QDbURpiTooD5AWmK6s3qkFnzFPJxSZLg@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-general

Pierre
The equivalent in PostgreSQL is through:

SELECT deptno,
STRING_AGG(ename, ',' ORDER BY ename) AS employeesFROM empGROUP
BY deptnoORDER BY deptno;

Atte
JRBM

El lun, 9 mar 2026 a las 15:21, Pierre Forstmann (<
pierre(dot)forstmann(at)gmail(dot)com>) escribió:

> Hello,
>
> I can write a LISTAGG aggregate for:
>
> create table emp(deptno numeric, ename text);
>
> SELECT deptno, LISTAGG(ename, ','::text ORDER BY ename) AS employees
> FROM emp GROUP BY deptno ORDER BY deptno;
>
> I would like to know if is possible to create an aggregate LISTAGG that
> would work like in Oracle:
>
> SELECT deptno,
> listagg(ename, ',') WITHIN GROUP (ORDER BY ename) AS employees
> FROM emp
> GROUP BY deptno
> ORDER BY deptno;
>
> I failed and IA also failed. Claude says:
>
> It is not possible to exactly replicate listagg(ename, ',') WITHIN GROUP
> (ORDER BY ename) as a custom PostgreSQL aggregate
> because PostgreSQL strictly forbids ungrouped columns as direct
> arguments to ordered-set aggregates.
>
> Do you agree ?
>
>
>
>
>
>
>

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Greg Sabino Mullane 2026-03-10 14:15:01 Re: Index (primary key) corrupt?
Previous Message Paul A Jungwirth 2026-03-09 22:05:17 Re: LISTAGG à la Oracle in PostgreSQL