In PostgreSQL kann das Aggregieren einer einzelnen Spalte bei gleichzeitiger Einbeziehung anderer Spalten in die Abfrage umständlich sein. Es stehen jedoch Lösungen zur Verfügung.
PostgreSQL 9.1 und höher vereinfacht den Prozess. Bei der Aggregation mit GROUP BY müssen Sie nur den Primärschlüssel der Tabelle einbeziehen. Wenn also foo1 der Primärschlüssel von tbl1 ist, kann Ihre Abfrage folgendermaßen vereinfacht werden:
SELECT foo1, foo2, foo3, foo4, foo5, foo6, string_agg(aggregated_field, ', ') FROM tbl1 GROUP BY 1 ORDER BY foo7, foo8;
Bei Abfragen mit mehreren Tabellen und Beziehungen kann dies effizienter sein Zuerst aggregieren und später verbinden. Zum Beispiel:
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 ...
Dadurch wird sichergestellt, dass die Aggregation nur im relevanten Teil der Abfrage erfolgt, wodurch die Leistung verbessert wird.
Das obige ist der detaillierte Inhalt vonWie kann eine einzelne Spalte in PostgreSQL-Abfragen mit mehreren Spalten effizient aggregiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!