当前位置:Gxlcms > 数据库问题 > SQL每日一题(20200509)

SQL每日一题(20200509)

时间:2021-07-01 10:21:17 帮助过:21人阅读

题目

有如下一张表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

 

 

如有其它解题思路,欢迎一起交流学习。

SQL每日一题(20200509)

标签:ade   结果   https   white   思路   original   oracle数据库   sans   oracl   

人气教程排行