2017-09-18 1 views
2

Wenn meine Frage etwas unklar ist, hier ist das, was ich meine, wir können eine Spalte mehrere Zeilen aggregieren array_agg verwenden, zum Beispiel ich diese TabelleWie aggregiert mehr als eine Spalte aus vielen Zeilen in einem in PostgreSQL?

foo | bar | baz 
-------+-------+------- 
    1 | 10 | 20 
    1 | 12 | 23 
    1 | 15 | 26 
    1 | 16 | 21 

haben Wenn ich diese Abfrage aufrufen:

select 
    foo, 
    array_agg(bar) as bars 
from table 
group by (foo) 

ergibt:

foo | bars 
-------+---------------- 
    1 | {10,12,15,16} 

Was die Abfrage wäre, diese Tabelle zu haben (mit bar, baz)?

foo | barbazs 
-------+------------------------------------ 
    1 | {{10,20},{12,23},{15,26},{16,21}} 

Ich habe in functions-aggregate (postgresql.org) aber es scheint nicht alle Funktionen werden diese Wirkung haben oder ich etwas fehle?

+1

Was passiert mit 'array_agg (array [bar, baz]) ''? – melpomene

+0

@melpomene es passiert, dass es funktioniert. danke – user544262772

Antwort

2

array_agg hat Arrays als mögliche Eingabewerte.

Wir müssen nur einen Weg, um ein Array bauen aus den beiden Eingängen colums bar und baz, die mit dem ARRAY constructor getan werden können:

SELECT foo, array_agg(ARRAY[bar, baz]) as barbaz FROM table GROUP BY foo; 
foo |    barbaz    
-----+----------------------------------- 
    1 | {{10,20},{12,23},{15,26},{16,21}} 

Hinweis: Es funktioniert auch mit DISTINCT (...array_agg(distinct array[bar,baz])...)

+0

Danke, ich machte eine Notiz für zukünftige Leser – user544262772

Verwandte Themen