PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да върнете резултатите от заявката като списък, разделен със запетая в PostgreSQL

В 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 за примери.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Колона не съществува?

  2. Темпорален дизайн на база данни, с обрат (на живо срещу чернови редове)

  3. Поточно репликация на PostgreSQL - дълбоко гмуркане

  4. Защо Postgres не използва индекса?

  5. PostgreSQL:ролята не е разрешена за влизане