sql >> Base de Datos >  >> NoSQL >> MongoDB

Cómo obtener varias filas en una lista separada por comas en SQL

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