使用 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;
谢谢