La mayoría de los principales RDBMS tienen una función que nos permite devolver los resultados de nuestras consultas como una lista separada por comas.
Es decir, podemos usar una función de este tipo para convertir cada fila en un elemento de lista independiente, dentro de una lista separada por comas.
A continuación se muestran ejemplos de cómo lograr esto en algunos de los RDBMS más populares.
MySQL
MySQL tiene el GROUP_CONCAT()
función que nos permite mostrar los resultados de nuestra consulta en una lista separada por comas:
SELECT GROUP_CONCAT(PetName)
FROM Pets;
Resultado:
Fluffy,Fetch,Scratch,Wag,Tweet,Fluffy,Bark,Meow
También podemos hacer cosas como eliminar valores duplicados (con DISTINCT
cláusula), especifique un orden para los resultados (con el ORDER BY
cláusula) y especifique un delimitador diferente.
Ver GROUP_CONCAT()
Función en MySQL para más ejemplos.
Base de datos de Oracle
Oracle Database tiene el LISTAGG()
función:
SELECT LISTAGG(last_name, ', ')
FROM employees
WHERE job_id = 'IT_PROG';
Resultado:
Hunold, Ernst, Austin, Pataballa, Lorentz
Al igual que MySQL, Oracle Database también nos permite eliminar valores duplicados, especificar un orden para los resultados, especificar un separador diferente, etc.
Ver LISTAGG()
Función en Oracle para más ejemplos.
Servidor SQL
SQL Server tiene el STRING_AGG()
función para devolver nuestros resultados en una lista separada por comas:
SELECT STRING_AGG(Genre, ',') AS Result FROM Genres
Resultado:
Rock,Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk
También podemos eliminar valores duplicados, especificar un orden para los resultados, cambiar el delimitador, etc.
Consulte Cómo devolver resultados de consultas como una lista separada por comas en SQL Server para obtener más ejemplos.
MariaDB
Al igual que MySQL, MariaDB también tiene un GROUP_CONCAT()
función:
SELECT GROUP_CONCAT(PetName)
FROM Pets;
Resultado:
Fluffy,Fetch,Scratch,Wag,Tweet,Fluffy,Bark,Meow
Al igual que la función del mismo nombre de MySQL, también podemos hacer cosas como eliminar valores duplicados (con DISTINCT
cláusula), especifique un orden para los resultados (con el ORDER BY
cláusula), cambiar el separador, etc.
Sin embargo, una cosa que tiene MariaDB sobre MySQL es el LIMIT
cláusula, que nos brinda la posibilidad de limitar el número de resultados en la lista.
Ver MariaDB GROUP_CONCAT()
para más ejemplos.
PostgreSQL
Postgres tiene el STRING_AGG()
función:
SELECT STRING_AGG(PetName, ',')
FROM Pets;
Resultado:
Fluffy,Fetch,Scratch,Wag,Tweet,Fluffy,Bark,Meow
También podemos eliminar valores duplicados (con DISTINCT
cláusula), especifique un orden para los resultados (con el ORDER BY
cláusula), cambiar el separador, etc.
Ver STRING_AGG()
Función en PostgreSQL para más ejemplos.
SQLite
En SQLite, podemos usar GROUP_CONCAT()
función para transformar los resultados de nuestra consulta en una lista separada por comas:
SELECT group_concat(FirstName)
FROM Employee;
Resultado:
Andrew,Nancy,Jane,Margaret,Steve,Michael,Robert,Laura
Ver cómo GROUP_CONCAT()
Funciona en SQLite para más ejemplos.
Columnas Múltiples
Todos los ejemplos anteriores usan una sola columna para la lista. También podemos concatenar varias columnas para producir una lista que incluya varias columnas.
Supongamos que tenemos una tabla con los siguientes datos:
SELECT TaskId, TaskName
FROM Tasks;
Resultado:
TaskId TaskName ------ ------------ 1 Feed cats 2 Water dog 3 Feed garden 4 Paint carpet 5 Clean roof 6 Feed cats
En SQL Server podemos hacer lo siguiente para mostrar ambas columnas en una sola fila:
SELECT STRING_AGG(CONCAT(TaskId, ') ', TaskName), ' ')
FROM Tasks
Resultado:
1) Feed cats 2) Water dog 3) Feed garden 4) Paint carpet 5) Clean roof 6) Feed cats