PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Връщане като масив от JSON обекти в SQL (Postgres)

json_build_object() в Postgres 9.4 или по-нова версия

Или jsonb_build_object() за да върнете 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;

Ръководството:

Създава JSON обект от списък с променливи аргументи. По конвенция списъкът с аргументи се състои от редуващи се ключове и стойности.

За всяка версия (включително Postgres 9.3)

row_to_json() с ROW израз би свършил работа:

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

Но губите оригиналните имена на колони. Прехвърлянето към регистриран тип ред избягва това. (Типът на ред на временна таблица служи и за 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;

Или използвайте подселекция вместо ROW изразяване. По-подробно, но без привеждане на типа:

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;

Повече обяснение в свързания отговор на Крейг:

  • PostgreSQL 9.2 row_to_json() с вложени съединения

db<>цигулка тук
Стар 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 сървърът няма да се изключи на Lion (Mac OS 10.7)

  2. Стимулиране на производителността за PostgreSQL с HAProxy

  3. GREATEST() Функция в PostgreSQL

  4. Създаване на копие на база данни в PostgreSQL

  5. ФАТАЛНО:удостоверяването на паролата не бе успешно за потребител postgres (postgresql 11 с pgAdmin 4)