Sql 有没有办法将JSON对象数组与其他视图/表中的另一个JSON对象数组合并?
因此,有两个表我想按年龄分组,这样我就可以从两个表中找到该年龄组的总人数。到目前为止,我能够做到这一点,但我希望JSON数据的方式是错误的 这是我的方法:Sql 有没有办法将JSON对象数组与其他视图/表中的另一个JSON对象数组合并?,sql,postgresql,Sql,Postgresql,因此,有两个表我想按年龄分组,这样我就可以从两个表中找到该年龄组的总人数。到目前为止,我能够做到这一点,但我希望JSON数据的方式是错误的 这是我的方法: SELECT temp.age, sum(temp.total), json_agg(temp.data_recs) as data_recs FROM ( SELECT '31-40' as age, COUNT(*) as total, json_agg(
SELECT temp.age, sum(temp.total), json_agg(temp.data_recs) as data_recs FROM (
SELECT
'31-40' as age, COUNT(*) as total,
json_agg(
CASE
WHEN table_1.age BETWEEN 31 AND 40
THEN json_build_object(
'country', table_1.country,
'Name', table_1.name
)
ELSE json_build_object(
'country', '',
'Name', ''
)
END
) AS data_recs
from table_1
WHERE table_1.age BETWEEN 31 AND 40
UNION ALL
SELECT
'31-40' as age, COUNT(*) as total,
json_agg(
CASE
WHEN table_2.age BETWEEN 31 AND 40
THEN json_build_object(
'country', table_2.country,
'Name', table_2.name
)
ELSE json_build_object(
'country', '',
'Name', ''
)
END
) AS data_recs
from table_2
WHERE table_2.age BETWEEN 31 AND 40
) AS temp group by temp.age
第1表中的结果如
age | total | data_recs
'31-40'| 2 | [{"name":"John","country":"USA"},{"name":"Eddy","country":"USA"}]
age | total | data_recs
'31-40'| 2 | [{"name":"Cienna","country":"Italy"},{"name":"Rosie","country":"Italy"}]
第二个表eg的结果
age | total | data_recs
'31-40'| 2 | [{"name":"John","country":"USA"},{"name":"Eddy","country":"USA"}]
age | total | data_recs
'31-40'| 2 | [{"name":"Cienna","country":"Italy"},{"name":"Rosie","country":"Italy"}]
到目前为止,我能够实现
age | total | data_recs
'31-40'| 4 | [[{"name":"John","country":"USA"},{"name":"Eddy","country":"USA"}],[{"name":"Cienna","country":"Italy"},{"name":"Rosie","country":"Italy"}]]
JSON数组1=[{“name”:“John”,“country”:“USA”},{“name”:“Eddy”,“country”:“USA”}]
JSON数组2=[{“name”:“ciena”,“country”:“Italy”},{“name”:“Rosie”,“country”:“Italy”}]
我想要的是:-
age | total | data_recs
'31-40' | 4 | [{"name":"John","country":"USA"},{"name":"Eddy","country":"USA"},{"name":"Cienna","country":"Italy"},{"name":"Rosie","country":"Italy"}]
我想要的组合JSON应该是这样的:
[{"name":"John","country":"USA"},{"name":"Eddy","country":"USA"},{"name":"Cienna","country":"Italy"},{"name":"Rosie","country":"Italy"}]
有没有办法做到这一点或其他方法?基本上,您的代码如下所示
SELECT
json_agg(json_objects from UNION)
FROM (
SELECT
json_agg(
json_build_object()
)
FROM
...
UNION
SELECT
json_agg(
json_build_object()
)
FROM
...
)
因此,首先创建数组,然后聚合数组。但是如果您省略了第一步,那么高级的json\u agg()
将聚合您使用json\u object\u build()创建的json对象
因此,您的解决方案应该只有一个聚合:
SELECT
json_agg(json_arrays from UNION)
FROM (
SELECT
json_build_object()
FROM
...
UNION
SELECT
json_build_object()
FROM
...
)
有没有可能在不从内部删除json_agg()的情况下得到结果,然后使用一些最不常用的函数呢?我看不出有什么方法是有意义的。当然,您可以使用内部json_agg()并在之后使用json_array_elements()取消对元素的测试。但为什么要这样做:聚合只是为了在。。。这可能是代码: