Sql 有没有办法将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(

因此,有两个表我想按年龄分组,这样我就可以从两个表中找到该年龄组的总人数。到目前为止,我能够做到这一点,但我希望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"}]
  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()取消对元素的测试。但为什么要这样做:聚合只是为了在。。。这可能是代码: