在postgresql中将结果合并到数组中
我得到了以下postgresql表: 我想以数组的形式获取所有参与者的日期。例如:在postgresql中将结果合并到数组中,sql,arrays,postgresql,Sql,Arrays,Postgresql,我得到了以下postgresql表: 我想以数组的形式获取所有参与者的日期。例如: { id: 252, start: xyz, end yzx, participants: [23, 51, 63, 67] } 因此,我创建了以下查询: SELECT dates.id, json_build_array(participants) as participants FROM dates, (SELECT date_id, user_id FROM date_participan
{ id: 252, start: xyz, end yzx, participants: [23, 51, 63, 67] }
因此,我创建了以下查询:
SELECT
dates.id,
json_build_array(participants) as participants
FROM
dates,
(SELECT date_id, user_id FROM date_participants) as participants
WHERE dates.id=participants.date_id AND dates.ground_event_id = 252;
但这导致:
id | participants
----+--------------------------------
252 | [{"date_id":252,"user_id":2}]
252 | [{"date_id":252,"user_id":191}]
252 | [{"date_id":252,"user_id":581}]
252 | [{"date_id":252,"user_id":582}]
(4 rows)
如何将这些行合并为一行,并将其所有用户ID作为参与者?您可以这样做:
select
dates.id,
dates.start,
dates.end,
json_build_array(
select user_id from date_participants where date_id = dates.id
) as participants
from
dates
您可以使用array\u agguser\u id作为select语句的一部分,将所有参与者聚合到一个数组中。
由于这是聚合,并且结果必须在一行中生成,因此您还需要在查询中使用group by
比如:
我在aggregate的帮助下得到了一个有效的查询:
SELECT
dates.id,
dates.start,
dates.end,
array_agg(date_participants.user_id) as participants
FROM
dates,
date_participants
WHERE dates.id = date_participants.date_id AND dates.ground_event_id = 252
GROUP BY dates.id;
1.请给我们看看样品数据。只是结果并没有真正的帮助。2.似乎您想要创建一个带有JSON数组的JSON对象。不是一个简单的数组。是这样吗。为什么要将值转换为文本?你听说过JOIN吗?@GordonLinoff谢谢你的反馈。其实不需要。更新答案。
SELECT
d.id,d.start,d.end,
array_agg(dp.user_id) as participants
FROM
dates d, date_participants dp
WHERE d.id=dp.date_id AND d.ground_event_id = 252
group by d.id,d.start,d.end;
SELECT
dates.id,
dates.start,
dates.end,
array_agg(date_participants.user_id) as participants
FROM
dates,
date_participants
WHERE dates.id = date_participants.date_id AND dates.ground_event_id = 252
GROUP BY dates.id;