MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como obter várias linhas em uma lista separada por vírgulas no SQL


A maioria dos principais RDBMSs tem uma função que nos permite retornar nossos resultados de consulta como uma lista separada por vírgulas.

Ou seja, podemos usar essa função para converter cada linha em um item de lista separado, dentro de uma lista separada por vírgulas.

Abaixo estão exemplos de como conseguir isso em alguns dos RDBMSs mais populares.

MySQL


MySQL tem o GROUP_CONCAT() função que nos permite produzir nossos resultados de consulta em uma lista separada por vírgulas:
SELECT GROUP_CONCAT(PetName) 
FROM Pets;

Resultado:
Fluffy,Fetch,Scratch,Wag,Tweet,Fluffy,Bark,Meow

Também podemos fazer coisas como remover valores duplicados (com o DISTINCT cláusula), especifique uma ordem para os resultados (com o ORDER BY cláusula) e especifique um delimitador diferente.

Veja GROUP_CONCAT() Function no MySQL para mais exemplos.

Banco de dados Oracle


O Banco de Dados Oracle tem o LISTAGG() função:
SELECT LISTAGG(last_name, ', ')
FROM employees
WHERE job_id = 'IT_PROG';

Resultado:
Hunold, Ernst, Austin, Pataballa, Lorentz    

Assim como o MySQL, o Oracle Database também permite remover valores duplicados, especificar uma ordem para os resultados, especificar um separador diferente, etc.

Veja LISTAGG() Function no Oracle para mais exemplos.

SQL Server


SQL Server tem o STRING_AGG() função para retornar nossos resultados em uma lista separada por vírgulas:
SELECT STRING_AGG(Genre, ',') AS Result FROM Genres

Resultado:
Rock,Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk

Também podemos remover valores duplicados, especificar uma ordem para os resultados, alterar o delimitador, etc.

Consulte Como retornar resultados de consulta como uma lista separada por vírgulas no SQL Server para obter mais exemplos.

MariaDB


Assim como o MySQL, o MariaDB também possui um GROUP_CONCAT() função:
SELECT GROUP_CONCAT(PetName) 
FROM Pets;

Resultado:
Fluffy,Fetch,Scratch,Wag,Tweet,Fluffy,Bark,Meow

Como a função de mesmo nome do MySQL, também podemos fazer coisas como, remover valores duplicados (com o DISTINCT cláusula), especifique uma ordem para os resultados (com o ORDER BY cláusula), altere o separador, etc.

No entanto, uma coisa que o MariaDB tem sobre o MySQL é o LIMIT cláusula, que nos fornece a capacidade de limitar o número de resultados na lista.

Veja MariaDB GROUP_CONCAT() para mais exemplos.

PostgreSQL


Postgres tem o STRING_AGG() função:
SELECT STRING_AGG(PetName, ',') 
FROM Pets;

Resultado:
Fluffy,Fetch,Scratch,Wag,Tweet,Fluffy,Bark,Meow

Também podemos remover valores duplicados (com o DISTINCT cláusula), especifique uma ordem para os resultados (com o ORDER BY cláusula), altere o separador, etc.

Consulte STRING_AGG() Função no PostgreSQL para mais exemplos.

SQLite


No SQLite, podemos usar o GROUP_CONCAT() função para transformar nossos resultados de consulta em uma lista separada por vírgulas:
SELECT group_concat(FirstName)
FROM Employee;

Resultado:
Andrew,Nancy,Jane,Margaret,Steve,Michael,Robert,Laura

Veja como GROUP_CONCAT() Funciona em SQLite para mais exemplos.

Várias colunas


Todos os exemplos acima usam uma única coluna para a lista. Também podemos concatenar várias colunas para produzir uma lista que inclui várias colunas.

Suponha que temos uma tabela com os seguintes dados:
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   

No SQL Server, podemos fazer o seguinte para gerar as duas colunas em uma única linha:
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