【发布时间】:2020-12-18 05:11:04
【问题描述】:
我正在动态构建一些看起来像这样的查询
select array_to_json(array_agg(t)) from (
select
a.field_1,
a.field_2,
jsonb_agg(distinct jsonb_build_object('id',g.id,'data',g.fullname)) as field_4,
jsonb_agg(distinct jsonb_build_object('id',i.optionid,'data',i.option)) as field_9,
jsonb_agg(distinct jsonb_build_object('id',c.id,'data',c.fullname)) as field_6,
jsonb_agg(distinct jsonb_build_object('id',k.id,'data',k.fullname)) as field_8,
jsonb_agg(distinct jsonb_build_object('id',m.id,'data',m.field_20)) as field_21,
l.field_5,
jsonb_agg(distinct jsonb_build_object('id',e.optionid,'data',e.option,'attributes',e.attributes)) as field_23,
n.data as field_13,
jsonb_agg(distinct jsonb_build_object('id',bb.id,'data',bb.fullname)) as field_12
from schema_1.tbl_342 a
left join schema_1.tbl_342_to_tbl_329_field_10 b on a.id=b.tbl_342_id
left join schema_1.tbl_329_customid c on b.tbl_329_id=c.id
left join schema_1.tbl_329 m on m.id=b.tbl_329_id
left join schema_1.tbl_329_field_23_join d on c.id=d.id
left join schema_1.tbl_329_field_23 e on d.optionid = e.optionid
left join schema_1.tbl_342_to_tbl_312_field_4 f on a.id=f.tbl_342_id
left join schema_1.tbl_312_customid g on f.tbl_312_id = g.id
left join schema_1.tbl_342_field_9_join h on h.id=a.id
left join schema_1.tbl_342_field_9 i on i.optionid=h.optionid
left join schema_1.tbl_343_to_tbl_342_field_6 j on j.tbl_342_id=a.id
left join schema_1.tbl_343_customid k on j.tbl_343_id=k.id
left join schema_1.tbl_343 l on l.id=j.tbl_343_id
left join schema_1.tbl_342_field_13_max n on n.id=a.id
group by a.field_1,a.field_2,l.field_5,m.field_23,n.data
) t
输出示例如下
[{"field_1":"Billy","field_2":null,"field_4":[{"id": 4, "data": "Senior Javascript Engineer"}, {"id": 5, "data": "Recruiter"}],"field_9":[{"id": 1, "data": "Blue"}],"field_6":[{"id": 32, "data": "Nancy - 32"}],"field_8":[{"id": null, "data": null}],"field_21":[{"id": 32, "data": "ggñ@cnn.com"}],"field_5":null,"field_23":[{"id": 5, "data": "Expert", "attributes": {"text": "#FFFFFF", "color": "#448AFF"}}],"field_13":"Expert"},{"field_1":"Jackson","field_2":null,"field_4":[{"id": 2, "data": "Marketing Manager M1004"}, {"id": 4, "data": "Senior Javascript Engineer"}, {"id": 5, "data": "Recruiter"}],"field_9":[{"id": 3, "data": "Red"}],"field_6":[{"id": 36, "data": ",Mike - 36"}],"field_8":[{"id": 2, "data": "Henry"}],"field_21":[{"id": 36, "data": "PtereSwanson@gmail.com"}],"field_5":"CA","field_23":[{"id": 6, "data": "Guru", "attributes": {"text": "#FFFFFF", "color": "#0D47A1"}}],"field_13":"Guru"},{"field_1":"Jacob","field_2":null,"field_4":[{"id": null, "data": null}],"field_9":[{"id": null, "data": null}],"field_6":[{"id": null, "data": null}],"field_8":[{"id": null, "data": null}],"field_21":[{"id": null, "data": null}],"field_5":null,"field_23":[{"id": null, "data": null, "attributes": null}],"field_13":null},{"field_1":"John","field_2":null,"field_4":[{"id": null, "data": null}],"field_9":[{"id": 2, "data": "Green"}],"field_6":[{"id": 32, "data": "Nancy - 32"}, {"id": 35, "data": "Bobby - 35"}],"field_8":[{"id": null, "data": null}],"field_21":[{"id": 32, "data": "ggñ@cnn.com"}, {"id": 35, "data": "Oliver@yahoo.com"}],"field_5":null,"field_23":[{"id": 4, "data": "Experienced", "attributes": {"text": "#FFFFFF", "color": "#C79702"}}, {"id": 5, "data": "Expert", "attributes": {"text": "#FFFFFF", "color": "#448AFF"}}],"field_13":"Expert"},{"field_1":"Todd","field_2":null,"field_4":[{"id": null, "data": null}],"field_9":[{"id": 4, "data": "Yellow"}],"field_6":[{"id": 1, "data": "Bobbie - 1"}, {"id": 4, "data": "bobby - 4"}],"field_8":[{"id": 1, "data": "Please stand up"}],"field_21":[{"id": 1, "data": "paul@sonos.com"}, {"id": 4, "data": "ggñ@cnn.com"}],"field_5":"MA","field_23":[{"id": 2, "data": "Novice", "attributes": {"text": "#000000", "color": "#FFEB3B"}}, {"id": 3, "data": "Intermediate", "attributes": {"text": "#000000", "color": "#F5F5F5"}}],"field_13":"Intermediate"}]
这是我想要得到的输出。
{count: 5, data:[{"field_1":"Billy","field_2":null,"field_4":[{"id": 4, "data": "Senior Javascript Engineer"}, {"id": 5, "data": "Recruiter"}],"field_9":[{"id": 1, "data": "Blue"}],"field_6":[{"id": 32, "data": "Nancy - 32"}],"field_8":[{"id": null, "data": null}],"field_21":[{"id": 32, "data": "ggñ@cnn.com"}],"field_5":null,"field_23":[{"id": 5, "data": "Expert", "attributes": {"text": "#FFFFFF", "color": "#448AFF"}}],"field_13":"Expert"},{"field_1":"Jackson","field_2":null,"field_4":[{"id": 2, "data": "Marketing Manager M1004"}, {"id": 4, "data": "Senior Javascript Engineer"}, {"id": 5, "data": "Recruiter"}],"field_9":[{"id": 3, "data": "Red"}],"field_6":[{"id": 36, "data": ",Mike - 36"}],"field_8":[{"id": 2, "data": "Henry"}],"field_21":[{"id": 36, "data": "PtereSwanson@gmail.com"}],"field_5":"CA","field_23":[{"id": 6, "data": "Guru", "attributes": {"text": "#FFFFFF", "color": "#0D47A1"}}],"field_13":"Guru"},{"field_1":"Jacob","field_2":null,"field_4":[{"id": null, "data": null}],"field_9":[{"id": null, "data": null}],"field_6":[{"id": null, "data": null}],"field_8":[{"id": null, "data": null}],"field_21":[{"id": null, "data": null}],"field_5":null,"field_23":[{"id": null, "data": null, "attributes": null}],"field_13":null},{"field_1":"John","field_2":null,"field_4":[{"id": null, "data": null}],"field_9":[{"id": 2, "data": "Green"}],"field_6":[{"id": 32, "data": "Nancy - 32"}, {"id": 35, "data": "Bobby - 35"}],"field_8":[{"id": null, "data": null}],"field_21":[{"id": 32, "data": "ggñ@cnn.com"}, {"id": 35, "data": "Oliver@yahoo.com"}],"field_5":null,"field_23":[{"id": 4, "data": "Experienced", "attributes": {"text": "#FFFFFF", "color": "#C79702"}}, {"id": 5, "data": "Expert", "attributes": {"text": "#FFFFFF", "color": "#448AFF"}}],"field_13":"Expert"},{"field_1":"Todd","field_2":null,"field_4":[{"id": null, "data": null}],"field_9":[{"id": 4, "data": "Yellow"}],"field_6":[{"id": 1, "data": "Bobbie - 1"}, {"id": 4, "data": "bobby - 4"}],"field_8":[{"id": 1, "data": "Please stand up"}],"field_21":[{"id": 1, "data": "paul@sonos.com"}, {"id": 4, "data": "ggñ@cnn.com"}],"field_5":"MA","field_23":[{"id": 2, "data": "Novice", "attributes": {"text": "#000000", "color": "#FFEB3B"}}, {"id": 3, "data": "Intermediate", "attributes": {"text": "#000000", "color": "#F5F5F5"}}],"field_13":"Intermediate"}]}
我希望在顶级属性中返回总记录,与数据结果分开。
我该怎么做,我尝试添加基表count(a.id),但它不返回总记录。
【问题讨论】:
-
需要样本数据和所需的输出才能获得准确的查询
-
好的,我用当前输出的例子更新了票证,然后我想生成什么。让我知道这是否足够。
-
添加了答案。
-
“总记录数”是什么意思?
select count(t), array_to_json(array_agg(t)) as data from (…) t能解决问题吗? -
标签: arrays postgresql jsonb