Heim >Datenbank >MySQL-Tutorial >Wie verkette ich Strings innerhalb einer PostgreSQL-Abfrage „group by'?
group by
Abfrage verkettenBei der Verarbeitung von Daten in einer PostgreSQL-Datenbank müssen Sie möglicherweise Zeichenfolgen für bestimmte Felder in einer group by
-Abfrage verketten. Dies kann je nach PostgreSQL-Version auf unterschiedliche Weise erreicht werden.
Moderne PostgreSQL-Versionen (veröffentlicht nach 2010) bieten die Funktion string_agg(expression, delimiter)
. Diese Funktion ermöglicht die Verkettung von Zeichenfolgen in group by
-Abfragen, getrennt durch angegebene Trennzeichen.
Um beispielsweise die COMPANY_ID
-Felder in jeder EMPLOYEE
-Gruppe zu verbinden, können Sie die folgende Abfrage verwenden:
<code class="language-sql">SELECT company_id, string_agg(employee, ', ') FROM mytable GROUP BY company_id;</code>
In PostgreSQL 8.4 können Sie array_agg(expression)
Aggregatfunktionen verwenden, um Werte in einem Array zu sammeln. Das Array kann dann mit der Funktion array_to_string()
in einen verketteten String umgewandelt werden:
<code class="language-sql">SELECT company_id, array_to_string(array_agg(employee), ', ') FROM mytable GROUP BY company_id;</code>
In älteren PostgreSQL-Versionen gibt es keine integrierte Aggregatfunktion für die String-Verkettung. Eine benutzerdefinierte Implementierung umfasst das Erstellen einer benutzerdefinierten Aggregatfunktion mithilfe der Funktion textcat
:
<code class="language-sql">CREATE AGGREGATE textcat_all( basetype = text, sfunc = textcat, stype = text, initcond = '' );</code>
Darüber hinaus kann eine benutzerdefinierte Verbindungsfunktion erstellt werden, um bestimmte Anforderungen zu erfüllen, z. B. das Ignorieren von Nullwerten oder leeren Zeichenfolgen:
<code class="language-sql">CREATE FUNCTION commacat_ignore_nulls(acc text, instr text) RETURNS text AS $$ BEGIN IF acc IS NULL OR acc = '' THEN RETURN instr; ELSIF instr IS NULL OR instr = '' THEN RETURN acc; ELSE RETURN acc || ', ' || instr; END IF; END; $$ LANGUAGE plpgsql;</code>
Mit dieser Funktion können Sie die Abfrage wie folgt ändern:
<code class="language-sql">SELECT company_id, commacat_ignore_nulls(employee) FROM mytable GROUP BY company_id;</code>
Das obige ist der detaillierte Inhalt vonWie verkette ich Strings innerhalb einer PostgreSQL-Abfrage „group by'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!