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

Returner som matrix af JSON-objekter i SQL (Postgres)

json_build_object() i Postgres 9.4 eller nyere

Eller jsonb_build_object() for at returnere 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;

Manualen:

Opbygger et JSON-objekt ud fra en variadisk argumentliste. Ifølge konventionen består argumentlisten af ​​skiftende nøgler og værdier.

For enhver version (inkl. Postgres 9.3)

row_to_json() med en ROW udtryk ville gøre tricket:

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

Men du mister originale kolonnenavne. Et kast til en registreret rækketype undgår det. (Rækketypen for en midlertidig tabel tjener også til ad hoc-forespørgsler.)

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;

Eller brug et undervalg i stedet for ROW udtryk. Mere udførligt, men uden type cast:

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;

Mere forklaring i Craigs relaterede svar:

  • PostgreSQL 9.2 row_to_json() med indlejrede joinforbindelser

db<>spil her
Gamle sqlfiddle




  1. Sådan bruger du visninger i en MySQL-database

  2. Dårlig standby

  3. Konfiguration af en lytter i Oracle Database (12c, 18c og 19c udgaver)

  4. SQL Server-forespørgsel:Hurtig med bogstavelig men langsom med variabel