在单向图中查找边的平均权重

时间:2014-01-28 08:37:59

标签: mysql sql aggregate-functions

我正在尝试从交互表中生成更易于解析的图表:

这 相互作用

from | to | weight
1    | 2  | 3
2    | 1  | 2
3    | 1  | 4
1    | 4  | 2
2    | 4  | 4
2    | 3  | 5
3    | 2  | 1

要 相互作用

from | to | average weight
1    | 2  | 2.5
1    | 3  | 4
1    | 4  | 2
2    | 4  | 4
2    | 3  | 3

1 个答案:

答案 0 :(得分:4)

这里的技巧是将您拥有的方向信息转换为非定向信息。让我们判断出“side1”节点总是较小的一个而“side2”总是更大(注意我故意不称它们为“to”和“from”,因为这意味着方向性)。可以使用LEASTGREATEST来实现此逻辑。一旦实现了这一点,在分组查询中使用AVG就是一件简单的事情:

SELECT   side1, side2, AVG(weight) 
FROM     (SELECT LEAST(to, from) AS side1, GREATEST(to, from) AS side2, weight
          FROM   my_table)
GROUP BY side1, side2