所以我想按年龄将这2个表分组在一起,以便到目前为止我可以从两个表中找到该年龄组的总人数,但是我想要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(
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"}]
第2个表格的结果,例如
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":"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应该是这样的:
[{"name":"John","country":"USA"},{"name":"Eddy","country":"USA"},{"name":"Cienna","country":"Italy"},{"name":"Rosie","country":"Italy"}]
有没有办法做到这一点或其他方法?
答案 0 :(得分:1)
基本上,您的代码如下
SELECT
json_agg(json_objects from UNION)
FROM (
SELECT
json_agg(
json_build_object()
)
FROM
...
UNION
SELECT
json_agg(
json_build_object()
)
FROM
...
)
因此,首先要创建数组,然后再聚合数组。但是,如果您省略了最初的json_agg()
步骤,那么高级json_agg()
将聚合您正在使用json_object_build()
创建的JSON对象。
因此,只有一种聚合才是您的解决方案:
SELECT
json_agg(json_arrays from UNION)
FROM (
SELECT
json_build_object()
FROM
...
UNION
SELECT
json_build_object()
FROM
...
)