In PostgreSQL-Datenbanken ist es eine häufige Anforderung, nach einem bestimmten Feld zu gruppieren und den Wert eines anderen Zeichenfolgenfelds in jeder Gruppe zu verketten. Die Implementierungsmethode hängt von der PostgreSQL-Version ab.
PostgreSQL 9.0 und höher (seit 2010) stellt für diesen Zweck die Funktion string_agg(expression, delimiter)
bereit. Um die Zeichenfolgen in einem Zeichenfolgenfeld mit dem Namen EMPLOYEE
zu verketten, können Sie die folgende Abfrage verwenden:
SELECT company_id, string_agg(employee, ', ') FROM mytable GROUP BY company_id;
Sie können auch eine ORDER BY
-Klausel in einem Aggregatausdruck angeben, um die Reihenfolge zu steuern, in der Werte verkettet werden.
PostgreSQL 8.4 führte die array_agg(expression)
Aggregationsfunktion ein, die Werte in einem Array sammelt. Um die verkettete Zeichenfolge zu erhalten, können Sie die Funktion array_to_string()
verwenden:
SELECT company_id, array_to_string(array_agg(employee), ', ') FROM mytable GROUP BY company_id;
Vor PostgreSQL 8.4 gab es keine integrierte Aggregatfunktion zum Verketten von Zeichenfolgen. Benutzerdefinierte Aggregatfunktionen können mit der CREATE AGGREGATE
-Anweisung erstellt werden:
CREATE AGGREGATE textcat_all( basetype = text, sfunc = textcat, stype = text, initcond = '' );
Diese grundlegende Aggregatfunktion verkettet einfach alle Zeichenfolgen in der Gruppe. Sie können auch eine benutzerdefinierte Funktion erstellen, die ein Trennzeichen zwischen verketteten Werten hinzufügt, zum Beispiel:
CREATE FUNCTION commacat(acc text, instr text) RETURNS text AS $$ BEGIN IF acc IS NULL OR acc = '' THEN RETURN instr; ELSE RETURN acc || ', ' || instr; END IF; END; $$ LANGUAGE plpgsql;
Sie können dann eine benutzerdefinierte Aggregatfunktion in einer GROUP BY
-Abfrage verwenden, um die Zeichenfolgen zu verketten:
SELECT company_id, textcat_all(commacat(NULL, employee)) AS concatenated_employees FROM mytable GROUP BY company_id;
Das obige ist der detaillierte Inhalt vonWie verkette ich Zeichenfolgen aus einem gruppierten Feld in PostgreSQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!