Kra*_*hra 4 sql oracle algorithm recursion
我有两张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
Run Code Online (Sandbox Code Playgroud)
id
表A中的列适用id
于表B.对于id
表A中的给定,可能存在表B的dep_id
保留id
.
要求是计算B中的条目及其所有相关条目的总和.这必须在一个单独的SQL查询中完成.我不能使用PL/SQL块.知道如何做到这一点.
例:
sum(id=1) = 100(id=1,dep_id=2) + 200(id=2,dep_id=3) + 300(id=3) = 600
Run Code Online (Sandbox Code Playgroud)
您可以使用CONNECT BY ROOT
构建依赖关系链接(分层查询),然后聚合:
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
Run Code Online (Sandbox Code Playgroud)
在plsqlchallenge的SQL测验中,可以使用类似但稍微复杂的模式(例如id:1
需要4x id:2
,id:3
每个需要8x )的其他解决方案.
归档时间: |
|
查看次数: |
3333 次 |
最近记录: |