sql >> Databáze >  >> NoSQL >> MongoDB

Jak získat více řádků do seznamu odděleného čárkami v SQL

Většina hlavních RDBMS má funkci, která nám umožňuje vracet výsledky dotazu jako seznam oddělený čárkami.

To znamená, že můžeme použít takovou funkci k převedení každého řádku na samostatnou položku seznamu v rámci seznamu odděleného čárkami.

Níže jsou uvedeny příklady, jak toho dosáhnout v některých populárnějších RDBMS.

MySQL

MySQL má GROUP_CONCAT() funkce, která nám umožňuje zobrazit výsledky dotazu v seznamu odděleném čárkami:

SELECT GROUP_CONCAT(PetName) 
FROM Pets;

Výsledek:

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

Můžeme také dělat věci, jako je odstranění duplicitních hodnot (pomocí DISTINCT klauzule), zadejte pořadí výsledků (pomocí ORDER BY klauzule) a zadejte jiný oddělovač.

Viz GROUP_CONCAT() Funkce v MySQL pro další příklady.

Databáze Oracle

Oracle Database má LISTAGG() funkce:

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

Výsledek:

Hunold, Ernst, Austin, Pataballa, Lorentz    

Stejně jako MySQL nám také Oracle Database umožňuje odstranit duplicitní hodnoty, určit pořadí výsledků, určit jiný oddělovač atd.

Viz LISTAGG() Další příklady najdete v aplikaci Oracle.

SQL Server

SQL Server má STRING_AGG() funkce, která vrátí naše výsledky v seznamu odděleném čárkami:

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

Výsledek:

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

Můžeme také odstranit duplicitní hodnoty, určit pořadí výsledků, změnit oddělovač atd.

Další příklady naleznete v části Jak vrátit výsledky dotazu jako seznam oddělený čárkami na serveru SQL.

MariaDB

Stejně jako MySQL má MariaDB také GROUP_CONCAT() funkce:

SELECT GROUP_CONCAT(PetName) 
FROM Pets;

Výsledek:

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

Stejně jako stejnojmenná funkce MySQL můžeme také dělat věci, jako je odstranění duplicitních hodnot (pomocí DISTINCT klauzule), zadejte pořadí výsledků (pomocí ORDER BY klauzule), změnit oddělovač atd.

Nicméně jedna věc, kterou má MariaDB oproti MySQL, je LIMIT klauzule, která nám poskytuje možnost omezit počet výsledků v seznamu.

Viz MariaDB GROUP_CONCAT() pro další příklady.

PostgreSQL

Postgres má STRING_AGG() funkce:

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

Výsledek:

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

Můžeme také odstranit duplicitní hodnoty (pomocí DISTINCT klauzule), zadejte pořadí výsledků (pomocí ORDER BY klauzule), změnit oddělovač atd.

Viz STRING_AGG() Funkce v PostgreSQL pro další příklady.

SQLite

V SQLite můžeme použít GROUP_CONCAT() funkce pro transformaci našich výsledků dotazu na seznam oddělený čárkami:

SELECT group_concat(FirstName)
FROM Employee;

Výsledek:

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

Viz Jak GROUP_CONCAT() Více příkladů funguje v SQLite.

Více sloupců

Všechny výše uvedené příklady používají pro seznam jeden sloupec. Můžeme také zřetězit více sloupců a vytvořit seznam, který obsahuje více sloupců.

Předpokládejme, že máme tabulku s následujícími údaji:

SELECT TaskId, TaskName 
FROM Tasks;

Výsledek:

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

V SQL Server můžeme udělat následující pro výstup obou sloupců v jednom řádku:

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

Výsledek:

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

  1. DeprecationWarning:collection.findAndModify je zastaralá. Místo toho použít findOneAndUpdate, findOneAndReplace nebo findOneAndDelete?

  2. MongoDB nebo CouchDB - vhodné pro výrobu?

  3. Které NoSQL databáze pro extrémně velké objemy dat

  4. Jak nakonfigurovat webovou aplikaci spring boot s redis pomocí Dockeru