gpt4 book ai didi

sql - 在SQL语句中查找递归和

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:52:17 25 4
gpt4 key购买 nike

我有两个表 A 和 B,例如:A (id, dep_id)B (id, amount)

那些表里的数据是这样的

A                 B

id dep_id id amount
--- ------- ---- --------
1 2 1 100
2 3 2 200
3 NULL 3 300
4 NULL 4 400

表 A 中的 id 列包含表 B 的 id。对于表 A 中给定的 id,可能有一个 dep_id 包含表 B 的 id

需求是计算B中某分录及其所有依赖分录的金额之和。这必须在一个单独的 sql 查询中完成。我不能为此使用 PL/SQL block 。知道如何做到这一点。

例子:

sum(id=1) = 100(id=1,dep_id=2) + 200(id=2,dep_id=3) + 300(id=3) = 600

最佳答案

您可以使用CONNECT BY ROOT 建立一个依赖链接(hierarchical query),然后聚合:

SQL> SELECT ID, SUM(amount)
2 FROM (SELECT connect_by_root(a.id) ID, b.amount
3 FROM a
4 JOIN b ON a.id = b.id
5 START WITH a.ID = 1
6 CONNECT BY PRIOR a.dep_id = a.ID)
7 GROUP BY ID;

ID SUM(AMOUNT)
---------- -----------
1 600

其他解决方案可用于类似但稍微复杂的架构(例如 id:1 需要 4xid:2,这需要 8xid:3 每个)在 this SQL quiz on plsqlchallenge 上.

关于sql - 在SQL语句中查找递归和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16545467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com