我有一个包含两个表的数据库。一个包含事件&另一个包含这些活动的参与者。这些事件有一个jsonb字段,其中包含一个具有"duration"
属性的对象数组
事件
id | 名称 | 出现次数 |
---|---|---|
1 | "The Great Beyond | [{"持续时间":100},{"连续时间":200},{'持续时间":300}] |
2 | ";"最后的倒计时"> | [{"持续时间":50}] |
3 | ";《下一个平原》 | 空 |
您可以计算子查询中的持续时间。你已经拥有了所需的大部分代码,你只需要移动它,例如:
SELECT
events.id AS "ID",
events.name AS "Name",
(SELECT coalesce(SUM((occurrences_arry->>'duration')::int), 0)
FROM jsonb_array_elements(events.occurrences) as occurrences_arry) as "Duration",
COUNT(attendees.*) as "Attendees"
FROM
events
INNER JOIN attendees on attendees.event_id = events.id
GROUP BY events.id
如果没有行,则SUM
返回null,因此在这种情况下,我使用coalesce
默认为0。