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

Sammenkæd flere rækker i et array med SQL på PostgreSQL

Dette er en Postgres indbygget siden et par versioner, så du ikke længere behøver at definere din egen, navnet er array_agg() .

test=> select array_agg(n) from generate_series(1,10) n group by n%2;
  array_agg   
--------------
 {1,3,5,7,9}
 {2,4,6,8,10}

(dette er Postgres 8.4.8).

Bemærk, at ingen ORDER BY er angivet, så rækkefølgen af ​​resultatrækkerne afhænger af den anvendte grupperingsmetode (her hash), dvs. den er ikke defineret. Eksempel:

test=> select n%2, array_agg(n) from generate_series(1,10) n group by (n%2);
 ?column? |  array_agg   
----------+--------------
        1 | {1,3,5,7,9}
        0 | {2,4,6,8,10}

test=> select (n%2)::TEXT, array_agg(n) from generate_series(1,10) n group by (n%2)::TEXT;
 text |  array_agg   
------+--------------
 0    | {2,4,6,8,10}
 1    | {1,3,5,7,9}

Nu ved jeg ikke, hvorfor du får {10,2,4,6,8} og {9,7,3,1,5} , da generate_series() skal sende rækkerne i rækkefølge.



  1. SQLite opdatering

  2. SQL Server 2008:hvordan giver jeg privilegier til et brugernavn?

  3. Hvordan returnerer man ResultSet fra Stored Procedure i Oracle?

  4. Find n nærmeste naboer for givet punkt ved hjælp af PostGIS?