sql >> Databáze >  >> RDS >> PostgreSQL

Agregace všech hodnot, které nejsou ve stejné skupině

V Postgres 11 nebo později použijte okno funkce s vlastním rámcem a frame_exclusion :

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

Pokud name není UNIQUE , a protože jste se zeptali:

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

db<>fiddle zde

První (také) pracuje s libovolným pořadím řádků, pouze s vyloučením aktuálního. Druhý vyžaduje ORDER BY zjistit, které řádky jsou ve stejné skupině.

Příručka:

Odvážný důraz můj.

To používá vlastní agregační funkci array_combine(anyarray) poskytuje a_horse .
Nebo zde:



  1. Chyba 101 „Dotaz není povolen v aplikaci Waitfor“ na serveru SQL

  2. Extrahujte konkrétní slova z textového pole v mysql

  3. MySQL s MAMP nefunguje s OSX Yosemite 10.10

  4. Smazat všechny řádky s časovým razítkem starším než x dní