PostgreSQL string_agg-Funktion

Shihab Sikder 20 Juni 2023
  1. Verwenden Sie string_agg(), um Strings in PostgreSQL zu verketten
  2. Ersetzen Sie das Duplikat von string_agg() in PostgreSQL
  3. Bestellung in string_agg() in PostgreSQL
PostgreSQL string_agg-Funktion

Dieser Artikel beschreibt die Verwendung der Funktion string_agg() zum Verketten von Zeichenfolgen eines Zeichenfolgenfelds in einer PostgreSQL-Abfrage GROUP BY.

Verwenden Sie string_agg(), um Strings in PostgreSQL zu verketten

string_agg() kombiniert die Strings, die keine Nullzeichen haben. Es nimmt den Spaltennamen und das Trennzeichen (d. h. Komma, Bindestrich, Buchstaben) als Eingabe.

Wir haben die folgende Tabelle der Mitarbeiter und assoziierten Unternehmen. Wir werden gebeten, alle Mitarbeiternamen getrennt durch ein Komma für jedes Unternehmen aufzulisten.

Hier sind die folgenden Daten, die wir haben.

postgres=# SELECT * from employee;
 id | companyname | employeename | salary
----+-------------+--------------+---------
  1 | Sony        | Bob          | 1500.55
  2 | Sony        | Bob          | 1500.55
  3 | Sony        | Jhon         |    2000
  4 | Sony        | Dow          |   15000
  5 | Sony        | Alice        |    5602
  6 | Google      | Jade         | 1500.55
  7 | Google      | Penny        | 1500.55
  8 | Google      | Kat          | 1500.55
  9 | Google      | Merly        | 1500.55
 10 | Hitachi     | Raymond      | 1500.55
 11 | Hitachi     | Skye         | 1500.55
 12 | Hitachi     | Sova         | 1500.55
 13 | Hitachi     | Jenny        | 1500.55

Versuchen wir, string_agg zu verwenden, und es wird nach Firmenname gruppiert. Beachten Sie nun, dass ein Eintrag zweimal vorhanden ist.

Verwenden Sie string_agg() in PSQL

SELECT companyname As CompanyName, STRING_AGG(employeename,', ') as Employees
FROM employee
GROUP BY companyname;

Ausgang:

 companyname |         employees
-------------+----------------------------
 Sony        | Bob, Bob, Jhon, Dow, Alice
 Google      | Jade, Penny, Kat, Merly
 Hitachi     | Raymond, Skye, Sova, Jenny
(3 rows)

Jetzt können wir sehen, dass alle Mitarbeiternamen für jedes Unternehmen gedruckt werden. Wir können sehen, dass Bob in der Sony doppelt gedruckt ist, wenn wir es bemerken.

Ersetzen Sie das Duplikat von string_agg() in PostgreSQL

Um das Duplikat zu entfernen, können wir das Schlüsselwort DISTINCT in der Funktion string_agg() vor dem Spaltennamen hinzufügen, den wir verknüpfen möchten.

Die Modifikation des obigen SQL, die das Duplikat aus string_agg() entfernt, sieht also wie folgt aus.

SELECT companyname As CompanyName, STRING_AGG(employeename,', ') as Employees
FROM employee
GROUP BY companyname;

Ausgang:

 companyname |         employees
-------------+----------------------------
 Google      | Jade, Kat, Merly, Penny
 Hitachi     | Jenny, Raymond, Skye, Sovav
 Sony        | Alice, Bob, Dow, Jhon
(3 rows)

Bestellung in string_agg() in PostgreSQL

Die string_agg()-Funktion kann Parameter als SQL-Abfrage annehmen. Wenn Sie also beispielsweise die Zeichenfolge in umgekehrter Reihenfolge verketten möchten, anstatt nur die Reihenfolge zu schreiben, können Sie die Reihenfolge der Ausgabezeichenfolge ändern.

Der aktualisierte Code sieht also wie folgt aus.

SELECT companyname As CompanyName, STRING_AGG(DISTINCT employeename,', ' ORDER BY employeename desc) as Employees
FROM employee
GROUP BY companyname;

Ausgang:

 companyname |         employees
-------------+----------------------------
 Google      | Penny, Merly, Kat, Jade
 Hitachi     | Sova, Skye, Raymond, Jenny
 Sony        | Jhon, Dow, Bob, Alice
(3 rows)

Hier ist ein Blog für den string_agg. Sie können sich auch die offizielle Dokumentation ansehen.

Die Befehle Tabelle erstellen und Einfügen finden Sie unter diesem pastebin-Link.

Shihab Sikder avatar Shihab Sikder avatar

I'm Shihab Sikder, a professional Backend Developer with experience in problem-solving and content writing. Building secure, scalable, and reliable backend architecture is my motive. I'm working with two companies as a part-time backend engineer.

LinkedIn Website

Verwandter Artikel - PostgreSQL String