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ě.
Odvážný důraz můj.
To používá vlastní agregační funkci array_combine(anyarray)
poskytuje a_horse
.
Nebo zde: