`我试图将一个子查询的值返回到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
子查询返回的是-
因为我是想根据ID来统计value_id的出现次数,所以我相信我已经得到了正确的信息。
完整的查询结果和期望的输出 -
我想返回给定ID的错误总数和一个json对象数组,每个对象里面是类型(value_id文本表示)和该类型的数量。
目前查询返回的是错误的 overall_total,而且似乎是重复了数组中的类型。我哪里做错了?
我认为你不需要 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