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

Обединяване на всички стойности, които не са в една и съща група

В Postgres 11 или по-късно използвайте прозорец функцията с персонализирана рамка и frame_exclusion :

SELECT *, array_combine(values) OVER (ROWS BETWEEN UNBOUNDED PRECEDING
                                           AND UNBOUNDED FOLLOWING
                                           EXCLUDE CURRENT ROW) AS agg_values
FROM   tbl;

Ако name не е UNIQUE , и тъй като попитахте:

SELECT *, array_combine(values) OVER (ORDER BY name
                                      ROWS BETWEEN UNBOUNDED PRECEDING
                                           AND UNBOUNDED FOLLOWING
                                           EXCLUDE GROUP) AS agg_values
FROM   tbl;

db<>fiddle тук

Първият (също) работи с произволен ред на редове, като изключва само текущия. Второто изисква ORDER BY за да установите кои редове са в една и съща група.

Ръководството:

Удебелен акцент е мой.

Това използва персонализираната агрегатна функция array_combine(anyarray) предоставено от a_horse .
Или тук:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PG Грешка не може да се свърже със сървъра:Връзката е отказана Сървърът работи ли на порт 5432?

  2. Как да получа резултат от динамичен SQL в Postgres?

  3. Обадете се на getNextException, за да видите причината:Как да накарате Hibernate / JPA да показва съобщението на DB сървъра за изключение

  4. RoR Група часови зони на Postgresql, като не работи на Heroku

  5. Копирайте таблица (включително индекси) в postgres