PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Kembali sebagai array objek JSON di SQL (Postgres)

json_build_object() di Postgres 9.4 atau lebih baru

Atau jsonb_build_object() untuk mengembalikan 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;

Panduan:

Membangun objek JSON dari daftar argumen variadik. Berdasarkan konvensi, daftar argumen terdiri dari kunci dan nilai yang bergantian.

Untuk versi apa pun (termasuk Postgres 9.3)

row_to_json() dengan ROW ekspresi akan berhasil:

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

Tapi Anda kehilangan nama kolom asli. Pemeran ke tipe baris terdaftar menghindari itu. (Jenis baris tabel sementara juga berfungsi untuk kueri 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;

Atau gunakan subpilih bukannya ROW ekspresi. Lebih bertele-tele, tetapi tanpa tipe pemeran:

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;

Penjelasan lebih lanjut dalam jawaban terkait Craig:

  • PostgreSQL 9.2 row_to_json() dengan gabungan bersarang

db<>main biola di sini
sqlfiddle lama




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah pesanan dalam subquery dijamin untuk dipertahankan?

  2. PostgreSQL:Buat indeks untuk kolom boolean

  3. Cara Mendapatkan Nomor Baris di PostgreSQL

  4. PostgreSQL 12:Menerapkan K-Nearest Neighbor Space Partitioned Generalized Search Tree Indexes

  5. Instalasi PostgreSQL 9 di Windows:Tidak dapat menulis di dalam jalur lingkungan TEMP.