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

Návrat jako pole objektů JSON v SQL (Postgres)

json_build_object() v Postgres 9.4 nebo novější

Nebo jsonb_build_object() vrátíte jsonb .

SELECT value_two, json_agg(json_build_object('value_three', value_three
                                           , 'value_four' , value_four)) AS value_four
FROM   mytable 
GROUP  BY value_two;

Manuál:

Sestaví objekt JSON ze seznamu variadických argumentů. Podle konvence se seznam argumentů skládá ze střídajících se klíčů a hodnot.

Pro jakoukoli verzi (včetně Postgres 9.3)

row_to_json() s ROW výraz by stačil:

SELECT value_two
     , json_agg(row_to_json((value_three, value_four))) AS value_four
FROM   mytable
GROUP  BY value_two;

Ale ztratíte původní názvy sloupců. Přetypování na registrovaný typ řádku tomu zabrání. (Řádkový typ dočasné tabulky slouží i pro ad hoc dotazy.)

CREATE TYPE foo AS (value_three text, value_four text);  -- once in the same session
SELECT value_two
     , json_agg(row_to_json((value_three, value_four)::foo)) AS value_four
FROM   mytable
GROUP  BY value_two;

Nebo použijte podvýběr místo ROW výraz. Podrobnější, ale bez přetypování:

SELECT value_two
     , json_agg(row_to_json((SELECT t FROM (SELECT value_three, value_four) t))) AS value_four
FROM   mytable
GROUP  BY value_two;

Další vysvětlení v Craigově související odpovědi:

  • PostgreSQL 9.2 row_to_json() s vnořenými spojeními

db<>zde hrajte
Starý sqlfiddle




  1. Najít sloupce vrácené funkcí s hodnotou tabulky (příklady T-SQL)

  2. Jak používat funkci Coalesce v Oracle

  3. PHP nenačítá php_pgsql.dll v systému Windows

  4. Polymorfismus v SQL databázových tabulkách?