Tôi có một bảng temp
định nghĩa như thế này:Làm cách nào để đặt tên thuộc tính chính xác thành kết quả tổng hợp json với mệnh đề GROUP BY?
id | name | body | group_id
-------------------------------
1 | test_1 | body_1 | 1
2 | test_2 | body_2 | 1
3 | test_3 | body_3 | 2
4 | test_4 | body_4 | 2
Tôi muốn tạo ra một kết quả phân nhóm theo group_id
và tổng hợp để json. Tuy nhiên, truy vấn như thế này:
SELECT group_id, json_agg(ROW(id, name, body)) FROM temp
GROUP BY group_id;
Tạo kết quả này:
1;[{"f1":1,"f2":"test_1","f3":"body_1"},
{"f1":2,"f2":"test_2","f3":"body_2"}]
2;[{"f1":3,"f2":"test_3","f3":"body_3"},
{"f1":4,"f2":"test_4","f3":"body_4"}]
Các thuộc tính trong các đối tượng json được đặt tên f1
, f2
, f3
thay vì id
, name
, body
theo yêu cầu. Tôi biết nó có thể bí danh họ đúng cách bằng cách sử dụng một subquery hoặc một biểu thức bảng chung, ví dụ như thế này:
SELECT json_agg(r.*) FROM (
SELECT id, name, body FROM temp
) r;
nào tạo ra kết quả này:
[{"id":1,"name":"test_1","body":"body_1"},
{"id":2,"name":"test_2","body":"body_2"},
{"id":3,"name":"test_3","body":"body_3"},
{"id":4,"name":"test_4","body":"body_4"}]
Nhưng tôi thật không thấy bất kỳ cách nào để sử dụng nó kết hợp với tập hợp. Tôi đang thiếu gì?
Không thực sự thanh lịch nhưng trông khá đơn giản, trên thực tế quá đơn giản để tôi thậm chí còn cân nhắc điều này ngay từ đầu, cảm ơn! – Przemek