Oracle 19c Database Logo.png

La versión 19c de la base de datos Oracle incluye una interesante mejora a la función LISTAGG, largamente solicitada y esperado por los desarrolladores.

 

La versión 12.2 ya introdujo algunas mejoras realmente interesantes, las cuales ya compartí en este articulo Oracle 12c R2 - LISTAGG y OVERFLOW.

 

Ahora es posible eliminar los valores repetidos utilizando la opción DISTINCT. Veamos el siguiente ejemplo (tomado del blog de Connor McDonald):

 

SELECT deptno,
       listagg(job,',') WITHIN GROUP ( ORDER BY job) AS jobs
FROM scott.emp
GROUP BY deptno
ORDER BY 1;

DEPTNO    JOBS
--------- --------------------------------------------------
10        CLERK,MANAGER,PRESIDENT
20        ANALYST,ANALYST,CLERK,CLERK,MANAGER
30        CLERK,MANAGER,SALESMAN,SALESMAN,SALESMAN,SALESMAN

 

Ahora es muy sencillo eliminar los valores duplicados simplemente utilizando la opción DISTINCT:

 

SELECT deptno,
       listagg(distinct job,',') WITHIN GROUP ( ORDER BY job) AS jobs
FROM scott.emp
GROUP BY deptno
ORDER BY 1;

DEPTNO    JOBS
--------- --------------------------------------------------
10        CLERK,MANAGER,PRESIDENT
20        ANALYST,CLERK,MANAGER
30        CLERK,MANAGER,SALESMAN

 

Si quieren probarlo ustedes mismo, nada mejor que los ejemplos disponibles en Oracle Live SQL (entorno de base de datos gratuito en la nube provisto por Oracle).

 

También es útil revisar la sintaxis completa de la función LISTAGG en la documentación de Oracle 19c.