sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur man får flera rader till en kommaseparerad lista i SQL

De flesta av de stora RDBMS:erna har en funktion som gör att vi kan returnera våra frågeresultat som en kommaseparerad lista.

Det vill säga, vi kan använda en sådan funktion för att konvertera varje rad till ett separat listobjekt, inom en kommaseparerad lista.

Nedan finns exempel på hur man uppnår detta i några av de mer populära RDBMS.

MySQL

MySQL har GROUP_CONCAT() funktion som låter oss mata ut våra sökfrågor i en kommaseparerad lista:

SELECT GROUP_CONCAT(PetName) 
FROM Pets;

Resultat:

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

Vi kan också göra saker som att ta bort dubbletter av värden (med DISTINCT sats), ange en ordning för resultaten (med ORDER BY sats), och ange en annan avgränsare.

Se GROUP_CONCAT() Funktion i MySQL för fler exempel.

Oracle Database

Oracle Database har LISTAGG() funktion:

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

Resultat:

Hunold, Ernst, Austin, Pataballa, Lorentz    

Precis som MySQL tillåter Oracle Database oss också att ta bort dubbletter av värden, ange en ordning för resultaten, ange en annan separator, etc.

Se LISTAGG() Funktion i Oracle för fler exempel.

SQL-server

SQL Server har STRING_AGG() funktion för att returnera våra resultat i en kommaseparerad lista:

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

Resultat:

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

Vi kan också ta bort dubbletter av värden, ange en ordning för resultaten, ändra avgränsaren etc.

Se Hur man returnerar frågeresultat som en kommaseparerad lista i SQL Server för fler exempel.

MariaDB

Precis som MySQL har MariaDB också en GROUP_CONCAT() funktion:

SELECT GROUP_CONCAT(PetName) 
FROM Pets;

Resultat:

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

Liksom MySQL:s funktion med samma namn kan vi också göra saker som att ta bort dubbletter av värden (med DISTINCT sats), ange en ordning för resultaten (med ORDER BY sats), ändra avgränsaren, etc.

Men en sak som MariaDB har över MySQL är LIMIT klausul, som ger oss möjlighet att begränsa antalet resultat i listan.

Se MariaDB GROUP_CONCAT() för fler exempel.

PostgreSQL

Postgres har den STRING_AGG() funktion:

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

Resultat:

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

Vi kan också ta bort dubbletter av värden (med DISTINCT). sats), ange en ordning för resultaten (med ORDER BY sats), ändra avgränsaren, etc.

Se STRING_AGG() Funktion i PostgreSQL för fler exempel.

SQLite

I SQLite kan vi använda GROUP_CONCAT() funktion för att omvandla våra frågeresultat till en kommaseparerad lista:

SELECT group_concat(FirstName)
FROM Employee;

Resultat:

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

Se hur GROUP_CONCAT() Fungerar i SQLite för fler exempel.

Flera kolumner

Ovanstående exempel använder alla en enda kolumn för listan. Vi kan också sammanfoga flera kolumner för att skapa en lista som innehåller flera kolumner.

Anta att vi har en tabell med följande data:

SELECT TaskId, TaskName 
FROM Tasks;

Resultat:

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

I SQL Server kan vi göra följande för att mata ut båda kolumnerna i en enda rad:

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

Resultat:

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

  1. Filskrivoperationer i mongo script?

  2. Säkra MongoDB från externa injektionsattacker

  3. MongoDB $indexOfCP

  4. NodeJS och MongoDB FindAndModify() måste tas bort eller uppdateras