Сложные агрегатные функции и иерархические структуры в SQL - PullRequest
1 голос
/ 12 сентября 2010

Я хочу хранить древовидную структуру произвольной глубины в базе данных SQL (MySQL, но хочу избежать специфических для СУБД функций).Теперь я хочу вычислить значение N для каждого узла следующим образом:

  • сначала вычислите сумму определенного столбца во всех (непосредственных) дочерних элементах текущего узла, которыелистья (т.е. не имеют детей)
  • , затем вычислим максимум значений N каждого из оставшихся детей, то есть детей с
  • и, наконец, добавим результатыиз первых двух шагов, чтобы получить значение N для текущего узла

Очевидно, что это включает в себя рекурсию, поэтому вложенные наборы, кажется, являются представлением выбора для этого сценария.Однако я не смог понять, как сформулировать приведенный выше расчет как запрос SQL.Легко получить SUM () или MAX () для всех потомков, но способ объединения агрегатных функций значительно усложняет ситуацию.У кого-нибудь есть решение?

1 Ответ

1 голос
/ 13 сентября 2010

Что если в схеме также есть дополнительные вычисляемые столбцы, такие как глубина и "это листовой узел"?

Это потребовало бы большего обслуживания (не то, чтобы вложенные наборы не требовали обслуживания), но я думаю, что этот запрос оказывается в пределах досягаемости, используя "стандартный" SQL.

...