Das Aggregieren einer einzelnen Spalte in einer Abfrage mit zahlreichen anderen Spalten kann insbesondere eine Herausforderung sein wenn alle SELECT- und ORDER BY-Felder entweder aggregiert oder Teil von GROUP BY sein müssen. Die Verwaltung dieser ausführlichen Abfragestruktur kann umständlich werden.
In PostgreSQL 9.1 oder höher gibt es eine einfachere Lösung. Wenn Primärschlüssel als GROUP BY-Kriterium verwendet werden, kann die Abfrage optimiert werden:
SELECT foo1, foo2, foo3, foo4, foo5, foo6, string_agg(aggregated_field, ', ') FROM tbl1 GROUP BY 1 -- Group by primary key (foo1) ORDER BY foo7, foo8;
Bei Abfragen mit mehreren Tabellen mit unterschiedlichen Beziehungen ist es effizienter, die Daten zuerst zu aggregieren und später Tabellen verknüpfen:
SELECT t1.foo1, t1.foo2, ..., t2.bar1, t2.bar2, ..., a.aggregated_col FROM tbl1 t1 LEFT JOIN tbl2 t2 ON ... ... LEFT JOIN ( SELECT some_id, string_agg(agg_col, ', ') AS aggregated_col FROM agg_tbl a ON ... GROUP BY some_id ) a ON a.some_id = ?.some_id ORDER BY ...
Durch die Trennung von Aggregation und Verknüpfung kann der Großteil der Abfrage unnötige Aggregation vermeiden, wodurch die Komplexität verringert und Verbesserungen erzielt werden Leistung.
Das obige ist der detaillierte Inhalt vonWie kann ich eine einzelne Spalte in einer mehrspaltigen Abfrage effizient aggregieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!