Większość głównych RDBMS ma funkcję, która umożliwia nam zwracanie wyników zapytania w postaci listy oddzielonej przecinkami.
Oznacza to, że możemy użyć takiej funkcji, aby przekonwertować każdy wiersz na oddzielny element listy, w ramach listy oddzielonej przecinkami.
Poniżej znajdują się przykłady, jak to osiągnąć w niektórych bardziej popularnych systemach RDBMS.
MySQL
MySQL ma GROUP_CONCAT()
funkcja, która pozwala nam wyświetlić wyniki zapytania w postaci listy oddzielonej przecinkami:
SELECT GROUP_CONCAT(PetName)
FROM Pets;
Wynik:
Fluffy,Fetch,Scratch,Wag,Tweet,Fluffy,Bark,Meow
Możemy również robić takie rzeczy jak usuwanie zduplikowanych wartości (za pomocą DISTINCT
klauzuli), określ kolejność wyników (za pomocą ORDER BY
klauzuli) i określ inny ogranicznik.
Zobacz GROUP_CONCAT()
Funkcja w MySQL, aby uzyskać więcej przykładów.
Baza danych Oracle
Baza danych Oracle ma funkcję LISTAGG()
funkcja:
SELECT LISTAGG(last_name, ', ')
FROM employees
WHERE job_id = 'IT_PROG';
Wynik:
Hunold, Ernst, Austin, Pataballa, Lorentz
Podobnie jak MySQL, Oracle Database pozwala nam również na usuwanie zduplikowanych wartości, określanie kolejności wyników, określanie innego separatora itp.
Zobacz LISTAGG()
Funkcja w Oracle, aby uzyskać więcej przykładów.
Serwer SQL
SQL Server ma STRING_AGG()
funkcja zwracająca nasze wyniki w postaci listy oddzielonej przecinkami:
SELECT STRING_AGG(Genre, ',') AS Result FROM Genres
Wynik:
Rock,Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk
Możemy również usunąć zduplikowane wartości, określić kolejność wyników, zmienić ogranicznik itp.
Zobacz Jak zwrócić wyniki zapytania jako listę rozdzielaną przecinkami w SQL Server, aby uzyskać więcej przykładów.
MariaDB
Podobnie jak MySQL, MariaDB ma również funkcję GROUP_CONCAT()
funkcja:
SELECT GROUP_CONCAT(PetName)
FROM Pets;
Wynik:
Fluffy,Fetch,Scratch,Wag,Tweet,Fluffy,Bark,Meow
Podobnie jak funkcja MySQL o tej samej nazwie, możemy również robić takie rzeczy, jak usuwanie zduplikowanych wartości (za pomocą DISTINCT
klauzuli), określ kolejność wyników (za pomocą ORDER BY
klauzula), zmień separator itp.
Jednak jedną rzeczą, którą MariaDB ma nad MySQL, jest LIMIT
klauzula, która daje nam możliwość ograniczenia liczby wyników na liście.
Zobacz MariaDB GROUP_CONCAT()
więcej przykładów.
PostgreSQL
Postgres ma STRING_AGG()
funkcja:
SELECT STRING_AGG(PetName, ',')
FROM Pets;
Wynik:
Fluffy,Fetch,Scratch,Wag,Tweet,Fluffy,Bark,Meow
Możemy również usunąć zduplikowane wartości (za pomocą DISTINCT
klauzuli), określ kolejność wyników (za pomocą ORDER BY
klauzula), zmień separator itp.
Zobacz STRING_AGG()
Funkcja w PostgreSQL, aby uzyskać więcej przykładów.
SQLite
W SQLite możemy użyć GROUP_CONCAT()
funkcja przekształcająca wyniki naszego zapytania w listę oddzieloną przecinkami:
SELECT group_concat(FirstName)
FROM Employee;
Wynik:
Andrew,Nancy,Jane,Margaret,Steve,Michael,Robert,Laura
Zobacz, jak GROUP_CONCAT()
Działa w SQLite, aby uzyskać więcej przykładów.
Wiele kolumn
Wszystkie powyższe przykłady używają jednej kolumny na liście. Możemy również połączyć wiele kolumn, aby utworzyć listę zawierającą wiele kolumn.
Załóżmy, że mamy tabelę z następującymi danymi:
SELECT TaskId, TaskName
FROM Tasks;
Wynik:
TaskId TaskName ------ ------------ 1 Feed cats 2 Water dog 3 Feed garden 4 Paint carpet 5 Clean roof 6 Feed cats
W SQL Server możemy wykonać następujące czynności, aby wyprowadzić obie kolumny w jednym wierszu:
SELECT STRING_AGG(CONCAT(TaskId, ') ', TaskName), ' ')
FROM Tasks
Wynik:
1) Feed cats 2) Water dog 3) Feed garden 4) Paint carpet 5) Clean roof 6) Feed cats