Heim >Datenbank >MySQL-Tutorial >Wie verkette ich Zeichenfolgen aus einem gruppierten Feld in PostgreSQL?
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:
<code class="language-sql">SELECT company_id, string_agg(employee, ', ') FROM mytable GROUP BY company_id;</code>
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:
<code class="language-sql">SELECT company_id, array_to_string(array_agg(employee), ', ') FROM mytable GROUP BY company_id;</code>
Vor PostgreSQL 8.4 gab es keine integrierte Aggregatfunktion zum Verketten von Zeichenfolgen. Benutzerdefinierte Aggregatfunktionen können mit der CREATE AGGREGATE
-Anweisung erstellt werden:
<code class="language-sql">CREATE AGGREGATE textcat_all( basetype = text, sfunc = textcat, stype = text, initcond = '' );</code>
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:
<code class="language-sql">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;</code>
Sie können dann eine benutzerdefinierte Aggregatfunktion in einer GROUP BY
-Abfrage verwenden, um die Zeichenfolgen zu verketten:
<code class="language-sql">SELECT company_id, textcat_all(commacat(NULL, employee)) AS concatenated_employees FROM mytable GROUP BY company_id;</code>
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!