Array unterschiedlicher Werte, die aus einer Array-Spalte in Postgres aggregiert wurden

8

Angenommen, wir haben (in PostgreSQL 9.1) eine Tabelle mit einem Bezeichner, einer Spalte vom Typ integer [] und einigen anderen Spalten (mindestens eine, obwohl es möglicherweise mehr gibt) vom Typ integer (oder jede andere, die summiert werden kann) ).

Das Ziel besteht darin, ein Aggregat zu haben, das für jede Bezeichner-Summe der "summierbaren" Spalte und ein Array aller verschiedenen Elemente der Array-Spalte angibt.

Der einzige Weg, den ich finden kann, besteht darin, eine unenn Funktion für die Array-Spalte in einer Unterabfrage zu verwenden und sie dann mit einer anderen Unterabfrage zu verbinden, die die "summierbaren" Spalten aggregiert.

Ein einfaches Beispiel ist wie folgt:

%Vor%

Der Code oben tut, was ich vorhatte, aber die Frage ist, können wir es besser machen? Hauptnachteil dieser Lösung ist, dass sie die Tabelle zweimal liest und aggregiert, was für größere Tabellen problematisch sein kann.

Eine andere Lösung des allgemeinen Problems besteht darin, die Array-Spalte zu vermeiden und für jedes Array-Element eine "summierbare" Spalte zu aggregieren und dann array_agg in der Aggregation zu verwenden - aber zumindest möchte ich jetzt bei diesem Array bleiben Weg.

Vielen Dank im Voraus für Ideen.

    
Michal Podlewski 18.02.2013, 11:49
quelle

1 Antwort

6

Die Abfrage könnte ein wenig schneller sein (nehme ich an), aber ich kann keine bemerkenswerten Optimierungen sehen:

%Vor%     
klin 18.02.2013 18:32
quelle

Tags und Links