sql >> Database teknologi >  >> RDS >> PostgreSQL

PostgreSQL GROUP_CONCAT() ækvivalent

Nogle RDBMS'er som MySQL og MariaDB har en GROUP_CONCAT() funktion, der giver dig mulighed for at returnere en forespørgselskolonne som en afgrænset liste (f.eks. en kommasepareret liste).

PostgreSQL har en lignende funktion kaldet STRING_AGG() . Denne funktion fungerer stort set på samme måde som GROUP_CONCAT() virker i MySQL og MariaDB.

Eksempel

Her er et grundlæggende eksempel for at demonstrere, hvordan PostgreSQL's STRING_AGG() funktion virker:

SELECT STRING_AGG(genre, ',') FROM Genres;

Resultat:

Rock,Jazz,Country,Pop,Blues,Hip Hop,Rap,Punk

Her er, hvad der sker, når vi bare udfører forespørgslen uden STRING_AGG() funktion:

SELECT genre FROM Genres;

Resultat:

+---------+
|  genre  |
+---------+
| Rock    |
| Jazz    |
| Country |
| Pop     |
| Blues   |
| Hip Hop |
| Rap     |
| Punk    |
+---------+
(8 rows)

Vi får otte rækker, hver med en separat værdi, i stedet for en lang kommasepareret række af alle værdier.

Hvis noget, PostgreSQL's STRING_AGG() er mere som MySQL's GROUP_CONCAT() end MariaDBs funktion af samme navn. Jeg siger dette, fordi MariaDB's GROUP_CONCAT() giver os mulighed for at give en LIMIT klausul (som fra MariaDB 10.3.3), lige fra selve funktionen. MySQL GROUP_CONCAT() understøtter ikke LIMIT klausul, og det gør PostgreSQL's STRING_AGG() heller ikke funktion (i hvert fald ikke i skrivende stund).

En anden forskel er, at PostgreSQL's STRING_AGG() kræver et andet argument (der specificerer den afgrænsning, der skal bruges). Både MySQL og MariaDB gør dette valgfrit med deres GROUP_CONCAT() funktioner.

Postgres's STRING_AGG() accepterer en ORDER BY klausul og en DISTINCT klausul (ligesom MariaDB og MySQL's GROUP_CONCAT() funktioner).

Se STRING_AGG() Funktion i PostgreSQL for flere eksempler.

Og hvis du er interesseret, har SQL Server også en STRING_AGG() funktion, der fungerer stort set på samme måde.


  1. Får du ugenummer fra en dato i MS SQL Server 2005?

  2. Hvorfor udfører PostgreSQL sekventiel scanning på indekseret kolonne?

  3. Indsætter i Oracle og henter det genererede sekvens-id

  4. streng bogstavelig talt for lang - hvordan tildeles lange xml-data til clob-datatype i oracle 11g r2