sql >> Databasteknik >  >> RDS >> PostgreSQL

Sammanfoga flera rader i en array med SQL på PostgreSQL

Detta är en Postgres inbyggd sedan några versioner så att du inte längre behöver definiera din egen, namnet är 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}

(detta är Postgres 8.4.8).

Observera att ingen ORDER BY är specificerad, så ordningen på resultatraderna beror på vilken grupperingsmetod som används (här, hash), dvs den är inte definierad. Exempel:

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 vet jag inte varför du får {10,2,4,6,8} och {9,7,3,1,5} , eftersom generate_series() ska skicka raderna i ordning.



  1. Oracle SQL Developer - Hur man återställer tappad tabell

  2. Grunderna i sys.dm_exec_requests

  3. Postgres dumpning av endast delar av tabeller för en dev-ögonblicksbild

  4. Skapa PDF-filer med PLSQL i Oracle