sql >> Databáze >  >> RDS >> PostgreSQL

PostgreSQL GROUP_CONCAT() Ekvivalent

Některé RDBMS jako MySQL a MariaDB mají GROUP_CONCAT() funkce, která umožňuje vrátit sloupec dotazu jako seznam s oddělovači (například seznam oddělený čárkami).

PostgreSQL má podobnou funkci s názvem STRING_AGG() . Tato funkce funguje v podstatě stejným způsobem jako GROUP_CONCAT() funguje v MySQL a MariaDB.

Příklad

Zde je základní příklad, který demonstruje, jak PostgreSQL STRING_AGG() funkce funguje:

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

Výsledek:

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

Co se stane, když provedeme dotaz bez STRING_AGG() funkce:

SELECT genre FROM Genres;

Výsledek:

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

Dostaneme osm řádků, každý se samostatnou hodnotou, namísto jednoho dlouhého řádku všech hodnot odděleného čárkou.

Pokud něco, tak STRING_AGG() PostgreSQL je spíše jako GROUP_CONCAT() MySQL než stejnojmenná funkce MariaDB. Říkám to proto, že GROUP_CONCAT() MariaDB nám umožňuje poskytnout LIMIT klauzule (od MariaDB 10.3.3), přímo ze samotné funkce. MySQL GROUP_CONCAT() nepodporuje LIMIT klauzule a ani STRING_AGG() PostgreSQL funkce (alespoň ne v době psaní tohoto článku).

Dalším rozdílem je STRING_AGG() PostgreSQL vyžaduje druhý argument (který určuje oddělovač, který se má použít). MySQL i MariaDB to činí volitelným pomocí jejich GROUP_CONCAT() funkce.

STRING_AGG() společnosti Postgres přijímá ORDER BY klauzule a DISTINCT klauzule (stejně jako GROUP_CONCAT() MariaDB a MySQL funkce).

Viz STRING_AGG() Funkce v PostgreSQL pro další příklady.

A v případě, že byste měli zájem, SQL Server má také STRING_AGG() funkce, která funguje v podstatě stejným způsobem.


  1. Pochopení SQL Server LOCKS na SELECT dotazy

  2. Jak nakonfigurovat SELinux pro systémy založené na MySQL (MySQL/MariaDB Replication + Galera)

  3. Jak mohu změnit výchozí časový limit připojení Mysql při připojování přes python?

  4. Získejte název krátkého dne v SQL Server (T-SQL)