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

Обединете множество редове с резултати от една колона в една, групирайте по друга колона

По-просто с агрегатната функция string_agg() (Postgres 9.0 или по-нова версия):

SELECT movie, string_agg(actor, ', ') AS actor_list
FROM   tbl
GROUP  BY 1;

1 в GROUP BY 1 е позиционна препратка и пряк път за GROUP BY movie в този случай.

string_agg() очаква тип данни text като вход. Останалите типове трябва да се предават изрично (actor::text ) - освен имплицитно прехвърляне към text е дефиниран - какъвто е случаят с всички други типове знаци (varchar , character , "char" ), и някои други видове.

Както isapir коментира, можете да добавите ORDER BY клауза в обобщеното извикване, за да получите сортиран списък - ако имате нужда от това. Като:

SELECT movie, string_agg(actor, ', ' ORDER BY actor) AS actor_list
FROM   tbl
GROUP  BY 1;

Но обикновено е по-бързо да сортирате редове в подзаявка. Вижте:

  • Postgres SQL – Създаване на масив в Select


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ефективна стратегия за оставяне на одитна следа/история на промените за DB приложения?

  2. Как да прочетем съдържанието на .sql файл в R скрипт, за да изпълним заявка?

  3. 3 начина за форматиране на число като процент в PostgreSQL

  4. Как pg_sleep_until() работи в PostgreSQL

  5. Промяна на съпоставяне на база данни, Ctype в Postgresql