sql >> Database teknologi >  >> RDS >> PostgreSQL

Samling af alle værdier, der ikke er i samme gruppe

I Postgres 11 eller senere, brug et vindue funktion med en brugerdefineret ramme og en frame_exclusion :

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

Hvis name er ikke UNIQUE , og da du spurgte:

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

db<>fiddle her

Den første fungerer (også) med vilkårlig rækkefølge af rækker, kun eksklusive den nuværende. Den anden kræver ORDER BY for at fastslå, hvilke rækker der er i samme gruppe.

Manualen:

Fed fremhævelse mine.

Dette bruger den tilpassede aggregerede funktion array_combine(anyarray) leveret af a_horse .
Eller her:



  1. Hvordan kan jeg forespørge en MySQL-database fra en Rails-app uden modeller?

  2. hvordan løses Fik minus en fra et læst opkald i oracle 11g jdbc 7/14 jdk 1.7?

  3. Sorter efter ugedag fra mandag til søndag

  4. Mysql bruge rækkedata i samme forespørgsel til at vælge en anden række?