PostgreSQL string_agg-Funktion
-
Verwenden Sie
string_agg()
, um Strings in PostgreSQL zu verketten -
Ersetzen Sie das Duplikat von
string_agg()
in PostgreSQL -
Bestellung in
string_agg()
in PostgreSQL
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.