MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come ottenere più righe in un elenco separato da virgole in SQL

La maggior parte dei principali RDBMS dispone di una funzione che ci consente di restituire i risultati delle query come un elenco separato da virgole.

Cioè, possiamo usare tale funzione per convertire ogni riga in un elemento di elenco separato, all'interno di un elenco separato da virgole.

Di seguito sono riportati esempi di come raggiungere questo obiettivo in alcuni dei più popolari RDBMS.

MySQL

MySQL ha il GROUP_CONCAT() funzione che ci consente di generare i risultati della nostra query in un elenco separato da virgole:

SELECT GROUP_CONCAT(PetName) 
FROM Pets;

Risultato:

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

Possiamo anche fare cose come rimuovere i valori duplicati (con il DISTINCT clausola), specificare un ordine per i risultati (con il ORDER BY clausola) e specificare un delimitatore diverso.

Vedi GROUP_CONCAT() Funzione in MySQL per ulteriori esempi.

Database Oracle

Oracle Database ha il LISTAGG() funzione:

SELECT LISTAGG(last_name, ', ')
FROM employees
WHERE job_id = 'IT_PROG';

Risultato:

Hunold, Ernst, Austin, Pataballa, Lorentz    

Come MySQL, anche Oracle Database ci consente di rimuovere valori duplicati, specificare un ordine per i risultati, specificare un separatore diverso, ecc.

Vedi LISTAGG() Funzione in Oracle per ulteriori esempi.

SQL Server

SQL Server ha il STRING_AGG() funzione per restituire i nostri risultati in un elenco separato da virgole:

SELECT STRING_AGG(Genre, ',') AS Result FROM Genres

Risultato:

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

Possiamo anche rimuovere valori duplicati, specificare un ordine per i risultati, modificare il delimitatore, ecc.

Per altri esempi, vedere Come restituire i risultati delle query come elenco separato da virgole in SQL Server.

MariaDB

Come MySQL, anche MariaDB ha un GROUP_CONCAT() funzione:

SELECT GROUP_CONCAT(PetName) 
FROM Pets;

Risultato:

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

Come l'omonima funzione di MySQL, possiamo anche fare cose come rimuovere i valori duplicati (con il DISTINCT clausola), specificare un ordine per i risultati (con il ORDER BY clausola), cambia il separatore, ecc.

Tuttavia, una cosa che MariaDB ha su MySQL è il LIMIT clausola, che ci offre la possibilità di limitare il numero di risultati nell'elenco.

Vedi MariaDB GROUP_CONCAT() per altri esempi.

PostgreSQL

Postgres ha il STRING_AGG() funzione:

SELECT STRING_AGG(PetName, ',') 
FROM Pets;

Risultato:

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

Possiamo anche rimuovere i valori duplicati (con il DISTINCT clausola), specificare un ordine per i risultati (con il ORDER BY clausola), cambia il separatore, ecc.

Vedi STRING_AGG() Funzione in PostgreSQL per ulteriori esempi.

SQLite

In SQLite, possiamo usare GROUP_CONCAT() funzione per trasformare i risultati della nostra query in un elenco separato da virgole:

SELECT group_concat(FirstName)
FROM Employee;

Risultato:

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

Guarda come GROUP_CONCAT() Funziona in SQLite per ulteriori esempi.

Più colonne

Gli esempi precedenti utilizzano tutti una singola colonna per l'elenco. Possiamo anche concatenare più colonne per produrre un elenco che includa più colonne.

Supponiamo di avere una tabella con i seguenti dati:

SELECT TaskId, TaskName 
FROM Tasks;

Risultato:

TaskId  TaskName    
------  ------------
1       Feed cats   
2       Water dog   
3       Feed garden 
4       Paint carpet
5       Clean roof  
6       Feed cats   

In SQL Server possiamo fare quanto segue per generare entrambe le colonne in una singola riga:

SELECT STRING_AGG(CONCAT(TaskId, ') ', TaskName), ' ') 
FROM Tasks

Risultato:

1) Feed cats 2) Water dog 3) Feed garden 4) Paint carpet 5) Clean roof 6) Feed cats