SQL子查询将结果插入到json中

问题描述 投票:0回答:1

`我试图将一个子查询的值返回到json_build_object中,子查询返回了正确的值,但当运行全选时,结果却不正确。可能值得注意的是,全选是一个视图的左连接。

        SELECT r.id, sum(q.total) AS overall_total,
        jsonb_agg(json_build_object('count', q.total, 'type', der.name)) AS totals
        FROM test.table_a p
            JOIN test.table_b r
            ON p.root_id = r.id
                inner join (
                    select r.id,  de.value_id as error_type, count(de.value_id) as total
                    from test.table_c de
                    inner join tests.error dr on de.value_id = dr.id
                    inner join test.table_a p on de.process = p.id
                    inner join test.table_b r on p.root = r.id
                    group by r.id, de.value_id 
            ) q on q.id = r.id
         inner join test.table_c er on er.process = p.id
         inner join tests.error der on er.value_id = der.id
    GROUP BY r.id) er on er.id = rs.id

子查询返回的是-

Subquery

因为我是想根据ID来统计value_id的出现次数,所以我相信我已经得到了正确的信息。

完整的查询结果和期望的输出 -

Full query

我想返回给定ID的错误总数和一个json对象数组,每个对象里面是类型(value_id文本表示)和该类型的数量。

目前查询返回的是错误的 overall_total,而且似乎是重复了数组中的类型。我哪里做错了?

sql postgresql jsonb
1个回答
1
投票

我认为你不需要 table_b, 试试下面这个查询。

SELECT q.id, SUM(q.total) AS overall_total,
       JSONB_AGG(JSONB_BUILD_OBJECT('count', q.total, 'type', q.name)) AS totals
  FROM (
        SELECT a.root_id AS id, e.name, COUNT(c.value_id) AS total
          FROM table_c c
          JOIN error e
            ON e.id = c.value_id
          JOIN table_a a 
            ON c.process = a.id  
         GROUP BY e.name, a.root_id  ) q
 GROUP BY q.id

演示

© www.soinside.com 2019 - 2024. All rights reserved.