Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在postgresql中将结果合并到数组中_Sql_Arrays_Postgresql - Fatal编程技术网

在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

我得到了以下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_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;