感谢出题者,如有冒犯,请与我联系,希望和大家一起学习交流。(目前使用oracle数据库环境编写sql)
题目
有如下一张表T
想要得到如下结果:
解释:T表中的Result列的第1行始终保持为1,后面的数据行=上一行的结果+上一行的NUM值,例如ID为2的Result为6=1+5,ID为3的Result为9=6+3,以此类推。
该如何写这个SQL?
读者可以试着自己思考写下,再往下翻... 如有不同解题方式,大家一起交流。
解答:
-
with递归的方式(oracle11g 支持with递归)
WITH T AS (SELECT 1 ID, 5 NUM FROM DUAL UNION ALL SELECT 2 ID, 3 NUM FROM DUAL UNION ALL SELECT 3 ID, 12 NUM FROM DUAL UNION ALL SELECT 4 ID, 2 NUM FROM DUAL UNION ALL SELECT 5 ID, 7 NUM FROM DUAL UNION ALL SELECT 6 ID, 9 NUM FROM DUAL), tt (id, num, result) as ( select id,num,1 result from t where id=1 union all select t.id ,t.num,tt.result+tt.num from tt,t where tt.id+1=t.id ) select * from tt;
ID NUM RESULT
1 5 1
2 3 6
3 12 9
4 2 21
5 7 23
6 9 30
如有其它解题思路,欢迎一起交流学习。