有一个看起来像这样的树结构:
root
A B
A1 A2 B1 B2
A1.1 A1.2 A2.1 B1.1
桌子看起来像这样:
id | name |value | parent_id
1 root null null
2 A null 1
3 B null 1
4 A1 null 2
5 A1.1 2 4
6 A1.2 3 4
7 A2 null 2
8 A2.1 5 7
9 B1 null 3
10 B2 1 3
11 B1.1 10 9
.........................
所有非叶子节点都必须包含其孩子的总和,而不仅仅是根节点。例如,这就是我所需的输出的样子:
id | name |value | parent_id
1 root 21 null
2 A 10 1
3 B 11 1
4 A1 5 2
5 A1.1 2 4
6 A1.2 3 4
7 A2 5 2
8 A2.1 5 7
9 B1 10 3
10 B2 1 3
11 B1.1 10 9
如何使用快速的postgres查询来实现此目标
have a tree structure that looks like this:
root
A B
A1 A2 B1 B2
A1.1 A1.2 A2.1 B1.1
the table looks something like this:
id | name |value | parent_id
1 root null null
2 A null 1
3 B null 1
4 A1 null 2
5 A1.1 2 4
6 A1.2 3 4
7 A2 null 2
8 A2.1 5 7
9 B1 null 3
10 B2 1 3
11 B1.1 10 9
.........................
All the non leaf nodes must contain the sum of their children, not only the root node. For example, this is how my desired output looks like:
id | name |value | parent_id
1 root 21 null
2 A 10 1
3 B 11 1
4 A1 5 2
5 A1.1 2 4
6 A1.2 3 4
7 A2 5 2
8 A2.1 5 7
9 B1 10 3
10 B2 1 3
11 B1.1 10 9
how can i achieve this with a fast Postgres query
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您需要在更新语句中进行递归CTE:
请参阅
You need a recursive CTE in the UPDATE statement:
See the demo.
使用递归
cte
:要使用总和的子节点值更新原始表,您可以在
update> update> update
中使用子查询:Using a recursive
cte
:To update your original table with the summed child node values, you can use a subquery in
update
: