В Postgres можем да използваме STRING_AGG()
функция за трансформиране на резултатите от нашата заявка в списък, разделен със запетая.
Вместо всяка стойност да се извежда в отделен ред (както при всяка обикновена заявка), стойностите се извеждат на един ред, разделени със запетая (или друг разделител по наш избор).
Пример
Представете си, че изпълняваме следната заявка:
SELECT *
FROM Genres;
Резултат:
+---------+---------+ | genreid | genre | +---------+---------+ | 1 | Rock | | 2 | Jazz | | 3 | Country | | 4 | Pop | | 5 | Blues | | 6 | Hip Hop | | 7 | Rap | | 8 | Punk | +---------+---------+ (8 rows)
Можем да изпълним следната заявка, за да изведем genre
колона като списък, разделен със запетая:
SELECT STRING_AGG(genre, ', ')
FROM Genres;
Резултат:
+-----------------------------------------------------+ | string_agg | +-----------------------------------------------------+ | Rock, Jazz, Country, Pop, Blues, Hip Hop, Rap, Punk | +-----------------------------------------------------+ (1 row)
Можем дори да включим GenreId
колона в нашия списък, ако искаме:
SELECT STRING_AGG(CONCAT(GenreId, ') ', Genre), ' ' ORDER BY GenreId ASC)
FROM Genres;
Резултат:
1) Rock 2) Jazz 3) Country 4) Pop 5) Blues 6) Hip Hop 7) Rap 8) Punk
Тук използвах и ORDER BY
клауза в STRING_AGG()
функция, за да сортирате резултатите по GenreId
във възходящ ред.
Можем също да правим неща като премахване на дубликати (с DISTINCT
клауза), използвайте различен разделител и използвайте функцията в рамките на групирана заявка.
Вижте STRING_AGG()
Функция в PostgreSQL за примери.