sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man returnerar frågeresultat som en kommaseparerad lista i PostgreSQL

I Postgres kan vi använda STRING_AGG() funktion för att omvandla våra frågeresultat till en kommaseparerad lista.

Istället för att varje värde matas ut i en separat rad (som med alla vanliga frågor), matas värdena ut till en enda rad, separerade med kommatecken (eller någon annan avgränsare som vi väljer).

Exempel

Föreställ dig att vi kör följande fråga:

SELECT * 
FROM Genres;

Resultat:

+---------+---------+
| genreid |  genre  |
+---------+---------+
|       1 | Rock    |
|       2 | Jazz    |
|       3 | Country |
|       4 | Pop     |
|       5 | Blues   |
|       6 | Hip Hop |
|       7 | Rap     |
|       8 | Punk    |
+---------+---------+
(8 rows)

Vi kan köra följande fråga för att mata ut genre kolumn som en kommaseparerad lista:

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

Resultat:

+-----------------------------------------------------+
|                     string_agg                      |
+-----------------------------------------------------+
| Rock, Jazz, Country, Pop, Blues, Hip Hop, Rap, Punk |
+-----------------------------------------------------+
(1 row)

Vi kan till och med inkludera GenreId kolumn i vår lista om vi vill:

SELECT STRING_AGG(CONCAT(GenreId, ') ', Genre), ' ' ORDER BY GenreId ASC) 
FROM Genres;

Resultat:

1) Rock 2) Jazz 3) Country 4) Pop 5) Blues 6) Hip Hop 7) Rap 8) Punk

Här använde jag även ORDER BY sats i STRING_AGG() funktion för att sortera resultaten efter GenreId i stigande ordning.

Vi kan också göra saker som att ta bort dubbletter (med DISTINCT sats), använd en annan avgränsare och använd funktionen i en grupperad fråga.

Se STRING_AGG() Funktion i PostgreSQL för exempel.


  1. Hur BIT_LENGTH() fungerar i MariaDB

  2. Hur man inte bygger PostgreSQL 9.0-tillägg på RPM-plattformar

  3. SQL-fråga för att ta bort tabell i MySQL

  4. Hur kan jag testa om en kolumn finns i en tabell med hjälp av en SQL-sats