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

Postgres - chuyển đổi một bảng trong cây JSON được nhóm lại

Theo một nghĩa nào đó, cấu trúc của truy vấn tương tự như kết quả:

select json_agg(children)
from (
    select 
        json_build_object(
            'id', lvl1, 
            'children', json_agg(children order by lvl1)) as children
    from (
        select 
            lvl1, 
            json_build_object(
                'id', lvl2, 
                'children', json_agg(items order by lvl2)) as children
        from (
            select 
                lvl1, 
                lvl2, 
                json_build_object(
                    'id', lvl3, 
                    'items', json_agg(item order by lvl3)) as items
            from my_table
            group by lvl1, lvl2, lvl3
            ) s
        group by lvl1, lvl2
        ) s
    group by lvl1
    ) s;

DbFiddle.

Lưu ý, order by trong các tập hợp là không cần thiết vì thứ tự của một mảng json là không xác định. Tôi đã thêm chúng để có được kết quả chính xác như mong đợi.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. psql:FATAL:cơ sở dữ liệu <người dùng> không tồn tại

  2. Làm thế nào để đếm các hàng liên quan bao gồm các danh mục con?

  3. PSQLException:ResultSet không được đặt đúng vị trí, có lẽ bạn cần phải gọi tiếp theo

  4. Làm cách nào để lấy danh sách tên trình tự trong Postgres?

  5. Cách ánh xạ org.postgresql.geometric.PGpoint sang Loại ngủ đông