Postgresql: Tổng hợp các đối tượng thành một mảng (json) (các vấn đề truy vấn con)


8

Tôi xin lỗi vì tiêu đề mơ hồ, nhưng đơn giản là tôi không biết những từ thích hợp để mô tả điều này.

Tôi có truy vấn này để biến một loạt các cột thành một đối tượng hoạt động tốt:

SELECT row_to_json(t) FROM ( SELECT type, properties, geometry FROM "bgbCargoMinardJSON" ) t

Tuy nhiên, tôi muốn nhóm các đối tượng nằm trong một danh mục nhất định thành một mảng. Danh mục này được xác định bởi một cột thứ tư trong bảng của tôi có tên là "Freight SẢNtId". Mảng nên có giá trị của "Freight SẢNtId" làm khóa. Vì thế:

"961":[ {"type":"Feature",.... {"type":"Feature",.... {"type":"Feature",.... ], "962":[ ..... ]

Vì vậy, tôi đã vật lộn với điều này trong 1 tiếng rưỡi qua. Tôi thực sự không có manh mối làm thế nào để làm điều này. Đây là những gì tôi có ngay bây giờ:

SELECT array_agg(row_to_json(t)) FROM ( SELECT type, properties, geometry FROM "bgbCargoMinardJSON" ) t) FROM "bgbCargoMinardJSON" GROUP BY "carProductId"

Câu trả lời:


8

Nếu bạn đang ở trên 9,4, một cái gì đó như thế này có thể là những gì bạn đang theo đuổi:

select json_object(array_agg(id)::text[],array_agg(rw)::text[])
from( select id
           , ( select to_json(array_agg(row_to_json(t)))
               from (select typ,prop from bgb where id=b.id) t ) rw
      from bgb b
      group by id ) z;

Cảm ơn Jack! Hình thành khôn ngoan nó đã lừa! Vấn đề duy nhất tôi gặp phải là nó không cung cấp json hợp lệ (về mặt kỹ thuật cũng vậy). Có văn bản này để chuyển đổi json đang diễn ra như: {"3565": "[{\"type\":Tôi có dấu nháy đơn trước mỗi dấu ngoặc và dấu gạch chéo trước mỗi dấu nháy đơn. Tôi đã có cái này trước đây và nó luôn là thứ gì đó với kiểu dữ liệu. Tuy nhiên, sự thật được nói, tôi không hoàn toàn hiểu rõ cách thức truy vấn bạn đã viết, và do đó tôi không thực sự biết cách khắc phục vấn đề này ở đâu và như thế nào.
ervemo

Đây có lẽ không phải là giải pháp tốt nhất, nhưng tôi chỉ sử dụng chức năng thay thế để khắc phục điều này. Một lần nữa cảm ơn thời gian của bạn!
ervemo

1
điều này làm việc cho trường hợp của tôi:json_agg(to_json(items.*)) as "items"
ricka
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.