martes, 26 de febrero de 2019

Oracle 19c - LISTAGG con opción DISTINCT


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.


No hay comentarios.:

Publicar un comentario