Heim > Datenbank > MySQL-Tutorial > Wie verkette ich Zeichenfolgen aus einem gruppierten Feld in PostgreSQL?

Wie verkette ich Zeichenfolgen aus einem gruppierten Feld in PostgreSQL?

Linda Hamilton
Freigeben: 2025-01-22 08:31:09
Original
284 Leute haben es durchsucht

How to Concatenate Strings from a Grouped Field 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

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>
Nach dem Login kopieren

Sie können auch eine ORDER BY-Klausel in einem Aggregatausdruck angeben, um die Reihenfolge zu steuern, in der Werte verkettet werden.

PostgreSQL-Version 8.4

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>
Nach dem Login kopieren

PostgreSQL 8.3 und früher

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage