PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Zwróć jako tablicę obiektów JSON w SQL (Postgres)

json_build_object() w Postgresie 9.4 lub nowszym

Lub jsonb_build_object() aby zwrócić 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;

Instrukcja:

Kompiluje obiekt JSON z variadic listy argumentów. Zgodnie z konwencją lista argumentów składa się z naprzemiennych kluczy i wartości.

Dla dowolnej wersji (w tym Postgres 9.3)

row_to_json() z ROW wyrażenie załatwiłoby sprawę:

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

Ale tracisz oryginalne nazwy kolumn. Pozwala to uniknąć rzutowania na zarejestrowany typ wiersza. (Typ wiersza tabeli tymczasowej służy również do zapytań ad hoc.)

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;

Lub użyj podwyboru zamiast ROW wyrażenie. Bardziej gadatliwy, ale bez rzutowania typu:

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;

Więcej wyjaśnień w powiązanej odpowiedzi Craiga:

  • PostgreSQL 9.2 row_to_json() z zagnieżdżonymi połączeniami

db<>graj tutaj
Stary sqlfiddle




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL:BŁĄD:42601:lista definicji kolumn jest wymagana dla funkcji zwracających rekord

  2. Nie można zainstalować PG gem na moim Macu z Mavericks

  3. Jak utworzyć histogram w PostgreSQL

  4. Uprość zagnieżdżoną wielkość liter, gdy instrukcja

  5. PostgreSQL 8.4 przyznaje uprawnienia DML do wszystkich tabel do roli