PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Trả về dưới dạng mảng các đối tượng JSON trong SQL (Postgres)

json_build_object() trong Postgres 9.4 hoặc mới hơn

Hoặc jsonb_build_object() để trả về 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;

Hướng dẫn sử dụng:

Tạo một đối tượng JSON từ một danh sách đối số khác nhau. Theo quy ước, danh sách đối số bao gồm các khóa và giá trị xen kẽ.

Đối với bất kỳ phiên bản nào (bao gồm Postgres 9.3)

row_to_json() với ROW biểu thức sẽ thực hiện thủ thuật:

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

Nhưng bạn mất tên cột ban đầu. Việc truyền đến một loại hàng đã đăng ký sẽ tránh được điều đó. (Loại hàng của bảng tạm thời cũng phục vụ cho các truy vấn đặc biệt.)

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;

Hoặc sử dụng lựa chọn phụ thay vì ROW biểu hiện. Chi tiết hơn, nhưng không có kiểu 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;

Giải thích thêm trong câu trả lời liên quan của Craig:

  • PostgreSQL 9.2 row_to_json () với các phép nối lồng nhau

db <> fiddle here
Sqlfiddle cũ




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để lấy tên múi giờ hiện tại trong Postgres 9.3?

  2. PGError:ERROR:tổng hợp không được phép trong mệnh đề WHERE trên truy vấn AR của một đối tượng và has_many đối tượng của nó

  3. Các chuỗi không có khoảng trống PostgreSQL

  4. Làm thế nào để ép kiểu mảng json sang mảng văn bản?

  5. Sử dụng PostgreSQL Replication Slots