0

使用 Postgres 10,我有代表“单位”、每个单位所属的“组”以及每对单位之间的“距离”的表格。

我现在想要一个组到组的距离表,它汇总了每对组的所有单元到单元的距离——即从一组中的所有单元到另一组中的所有单元的距离的聚合数组。

我有的

  'units'          'unit_distances'
  id | group       this_unit_id | that_unit_id | distance      
  ----------       --------------------------------------
  1  |   1            1         |   2          | d_12
  2  |   1            1         |   3          | d_13
  3  |   2            1         |   4          | d_14
  4  |   3            2         |   3          | d_23
...  | ...          ...         | ...          |  ...

我想要的是

'group_distances'
this_group_id | that_group_id | all_distances
---------------------------------------------------
  1            |   2          | {d_13, d_23}
  1            |   3          | {d_14, d_24}
  2            |   3          | {d_34}
...            | ...          | {..., ...

我不确定如何为所有组组配对返回所有此类数组并生成上面描述的表格。目前,我只能通过单独定义站点(如下面的 x 和 y)来获取这些数组。

with dist as (
    select      distance 
    from        unit_distances
    inner join  units
    on          unit_distances.this_unit_id = units.id
    WHERE       units.group = x
intersect
    select      distance 
    from        unit_distances
    inner join  units
    on          unit_distances.that_unit_id = units.id
    WHERE       units.group = y)

select  array_agg(distance) from dist;

谢谢

4

1 回答 1

0

如果我理解正确,这只是获取组的两个连接和距离的聚合:

select u1.group, u2.group, array_agg(ud.distance) as all_distances
from unit_distances ud join
     units u1
     on ud.this_unit_id = u1.id join
     units u2
     on ud.that_unit_id = u2.id
group by u1.group, u2.group;
于 2018-11-01T01:53:55.570 回答