MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment obtenir plusieurs lignes dans une liste séparée par des virgules en SQL

La plupart des principaux SGBDR ont une fonction qui nous permet de renvoyer les résultats de nos requêtes sous forme de liste séparée par des virgules.

Autrement dit, nous pouvons utiliser une telle fonction pour convertir chaque ligne en un élément de liste séparé, dans une liste séparée par des virgules.

Vous trouverez ci-dessous des exemples de la manière d'y parvenir dans certains des SGBDR les plus populaires.

MySQL

MySQL a le GROUP_CONCAT() fonction qui nous permet d'afficher les résultats de notre requête dans une liste séparée par des virgules :

SELECT GROUP_CONCAT(PetName) 
FROM Pets;

Résultat :

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

Nous pouvons également faire des choses comme, supprimer les valeurs en double (avec le DISTINCT clause), spécifiez un ordre pour les résultats (avec la ORDER BY clause), et spécifiez un délimiteur différent.

Voir GROUP_CONCAT() Fonction dans MySQL pour plus d'exemples.

Base de données Oracle

Oracle Database a le LISTAGG() fonction :

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

Résultat :

Hunold, Ernst, Austin, Pataballa, Lorentz    

Comme MySQL, Oracle Database nous permet également de supprimer les valeurs en double, de spécifier un ordre pour les résultats, de spécifier un séparateur différent, etc.

Voir LISTAGG() Fonction dans Oracle pour plus d'exemples.

SQL Server

SQL Server a le STRING_AGG() fonction pour renvoyer nos résultats dans une liste séparée par des virgules :

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

Résultat :

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

Nous pouvons également supprimer les valeurs en double, spécifier un ordre pour les résultats, modifier le délimiteur, etc.

Voir Comment renvoyer les résultats d'une requête sous forme de liste séparée par des virgules dans SQL Server pour plus d'exemples.

MariaDB

Comme MySQL, MariaDB a également un GROUP_CONCAT() fonction :

SELECT GROUP_CONCAT(PetName) 
FROM Pets;

Résultat :

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

Comme la fonction MySQL du même nom, nous pouvons également faire des choses comme, supprimer les valeurs en double (avec le DISTINCT clause), spécifiez un ordre pour les résultats (avec la ORDER BY clause), changer le séparateur, etc.

Cependant, une chose que MariaDB a sur MySQL est le LIMIT clause, qui nous donne la possibilité de limiter le nombre de résultats dans la liste.

Voir MariaDB GROUP_CONCAT() pour plus d'exemples.

PostgreSQL

Postgres a le STRING_AGG() fonction :

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

Résultat :

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

Nous pouvons également supprimer les valeurs en double (avec le DISTINCT clause), spécifiez un ordre pour les résultats (avec la ORDER BY clause), changer le séparateur, etc.

Voir STRING_AGG() Fonction dans PostgreSQL pour plus d'exemples.

SQLite

Dans SQLite, nous pouvons utiliser le GROUP_CONCAT() fonction pour transformer nos résultats de requête en une liste séparée par des virgules :

SELECT group_concat(FirstName)
FROM Employee;

Résultat :

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

Voir comment GROUP_CONCAT() Fonctionne dans SQLite pour plus d'exemples.

Colonnes multiples

Les exemples ci-dessus utilisent tous une seule colonne pour la liste. Nous pouvons également concaténer plusieurs colonnes pour produire une liste qui comprend plusieurs colonnes.

Supposons que nous ayons un tableau avec les données suivantes :

SELECT TaskId, TaskName 
FROM Tasks;

Résultat :

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

Dans SQL Server, nous pouvons effectuer les opérations suivantes pour afficher les deux colonnes sur une seule ligne :

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

Résultat :

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