我不知道我使用的术语是否正确,但我试图找到树结构中每个节点的累积和,但子节点仅将其累积和的一定百分比贡献给其父节点的累积和总和。
Emission(E1) = Emission(E1)
Emission(E2) = Emission(E2) + percent_Contribution(E1) * Emission(E1)
Emissions(E3) = Emission(E3) + percent_Contribution(E2) * Emission(E2)
这就是我想要达到的结果:
实体ID | 家长ID | 排放量 | 贡献百分比 | 累计金额 |
---|---|---|---|---|
E1 | E2 | 10 | 80 | 10 |
E2 | E3 | 20 | 80 | 20 + (10 * 80 / 100) = 28 |
E3 | 空 | 30 | 空 | 30 + (28 * 80 / 100) = 52.4 |
我不熟悉 SQL,但我的研究告诉我应该纠正递归 CTE,但我无法让它与加权值一起工作。如果不可能用纯 SQL 来完成,我也希望能指出正确的方向。
原始排序的解决方案
WITH RECURSIVE
cte AS (
SELECT 2 as Nextid, entityId, parentId, emission, percentContribution, emission as cumulativeSum
FROM Emissions WHERE entityId='E3'
UNION ALL
SELECT Nextid - 1, e.entityId, e.parentId, e.emission, e.percentContribution, e.emission + (c.cumulativeSum * c.percentContribution /100)
FROM cte c
INNER JOIN Emissions e ON e.entityId=CONCAT('E',c.Nextid)
WHERE c.Nextid > 0
)
SELECT * FROM cte ORDER BY Nextid;