2014-01-28 2 views
-5

Я пытаюсь произвести лёгкий для синтаксического анализа графа из взаимодействий таблицы:Нахождение среднего веса ребер графа однонаправленного

от взаимодействий

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 

ответ

4

Трюк здесь состоит в том, чтобы превратить информацию направленности, которую вы имеете в ненаправленную информацию. Давайте решим, что узел «side1» всегда будет меньшим, а «side2» всегда будет больше (обратите внимание, что я целенаправленно не назову их «на» и «от», поскольку это подразумевает направленность). Эта логика может быть достигнута путем использования LEAST и GREATEST. Как только это будет достигнуто, проще всего использовать 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 
Смежные вопросы