SQL データベースに任意の深さのツリー構造を格納したい (MySQL ですが、DBMS 固有の機能は避けたい)。ここで、次のように各ノードの値Nを計算します。
- まず、葉である現在のノードのすべての(直接の)子の特定の列の合計を計算します(つまり、子を持たない)
- 次に、残りの子、つまり子を持つ子のそれぞれの値Nの最大値を計算します。
- 最後に、最初の 2 つのステップの結果を加算して、現在のノードの値Nを取得します。
明らかに、これには再帰が含まれるため、ネストされたセットがこのシナリオの選択の表現のようです。しかし、上記の計算を SQL クエリとして定式化する方法がわかりませんでした。すべての子孫の SUM() または MAX() を取得するのは簡単ですが、集計関数を組み合わせる方法が問題を非常に複雑にします。誰にも解決策がありますか?