大佬教程收集整理的这篇文章主要介绍了PostgreSQL中的层次求和,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
在postgresql中,您可以使用递归CTE(公用表表达式)在查询中遍历树。
这是文档中的两个相关链接:
由于不需要子选择,因此在较大的数据集上运行可能会比Arion的查询好一些。
WITH REcursIVE children AS (
-- SELEct leaf nodes
SELECT ID, value, parent
FROM t
WHERE value IS NOT NulL
union all
-- propagate values of leaf nodes up, adding rows
SELECT t.ID, children.value, t.parent
FROM children JOIN t ON children.parent = t.ID
)
SELECT ID, sum(value)
FROM children
GROUP BY ID -- sum up appropriate rows
ORDER BY ID;
这是我在postgresql中遇到的问题的简化版本。
我有下表 A :
[ID IntegeR | 数值 NUMERIC(10,2) | 父 整数 ]
其中“ PARENT”是列ID的自引用FK。
该表的定义是:
create table A(id integer IDENTITY,VALUE NUMERIC(10,2),PARENT INTEGER)
ALTER TABLE A ADD CONSTraiNT FK FOREIGN KEY (PARENT) REFERENCES A(ID)
这个简单的表允许定义任意深度的树数据结构。现在,我需要编写一个SQL(我不希望不使用服务器端PL-
SQL)来为每个节点报告子树“挂”下的总值。例如,具有下表:
| ID | VALUE | PARENT |
-------------------------
| 1 | NULL | NULL |
| 2 | 3.50 | 1 |
| 3 | NULL | NULL |
| 4 | NULL | 3 |
| 5 | 1.50 | 4 |
| 6 | 2.20 | 4 |
我应该得到以下结果集:
| ID | @R_226_10586@l-Value-of-Subtree |
| 1 | 3.50 |
| 2 | 3.50 |
| 3 | 3.70 |
| 4 | 3.70 |
| 5 | 1.50 |
| 6 | 2.20 |
对于simplicitly,你可以假设,只有叶节点有值,非叶节点总是有一个值 NULL 的 值
列。有没有办法在SQL中做到这一点,甚至利用POSTGReSQL特定的扩展?
以上是大佬教程为你收集整理的PostgreSQL中的层次求和全部内容,希望文章能够帮你解决PostgreSQL中的层次求和所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。