我需要在分层查询中累积数据,如下所示:
select
id,
prior id as parent_id,
count * prior count --need to be accumulated through whole hierarchy like sys_connect_by_path
from table
start with id = 1
connect by prior id = parent_id
除此之外,我只能访问前一行,因此它无法正常工作。而且我无法SELECT
对前一行使用当前子句中定义的别名:
select
id,
prior id as parent_id,
count,
(count * prior whole_count) as count_product --not allowed to do this :(
from table
start with id = 1
connect by prior id = parent_id
我缺少什么?SYS_CONNECT_BY_PATH
完全按照我的需要进行操作(除了连接而不是乘法),所以应该是可以的。我可以使用WITH
子句来执行此操作,但出于某种原因,它非常慢,例如 需要半秒,CONNECT_BY
而 需要约 20 秒WITH
。
预期输出:
ID | 父代 ID | 数数 | COUNT_PRODUCT |
---|---|---|---|
1 | 无效的 | 1 | 1 |
2 | 1 | 2 | 2 |
3 | 2 | 3 | 6 |
4 | 3 | 4 | 24 |
5 | 4 | 5 | 120 |
6 | 5 | 6 | 720 |
如果您尝试
count
通过层次结构获取连续值的乘积,则使用递归子查询分解子句:对于样本数据来说:
输出:
小提琴
假设您的数据是树结构(无循环),并且从每个后代元素到树的根都有一条路径,那么您可以使用分层查询下降树,然后使用反向相关分层查询找到所有先前的值,并聚合它们的自然对数来计算乘积:
对于样本数据来说:
输出:
小提琴
我并不认为它特别聪明,但如果你坚持使用 CONNECT BY 和 SYS_CONNECT_BY_PATH: