PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Agregacja wszystkich wartości spoza tej samej grupy

W Postgresie 11 lub później użyj okna funkcja z niestandardową ramką i frame_exclusion :

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

Jeśli name nie jest UNIQUE , a skoro zapytałeś:

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

db<>fiddle tutaj

Pierwsza (również) działa z dowolną kolejnością wierszy, wyłączając tylko bieżący. Drugi wymaga ORDER BY aby ustalić, które wiersze znajdują się w tej samej grupie.

Podręcznik:

Pogrubiony nacisk na moje.

Używa niestandardowej funkcji agregującej array_combine(anyarray) dostarczone przez a_horse .
Lub tutaj:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. dlaczego postgres wyświetla jednocześnie błąd aktualizacji wiersza, gdy wyraźnie blokuję całą tabelę?

  2. Wymień wszystkie sekwencje w Postgres db 8.1 z SQL

  3. Jak działa make_interval() w PostgreSQL

  4. odpowiednik connect_by_root w postgresie

  5. Obsługa wyjątków PostgreSQL