SQL每日一题(20200509)

引自:https://mp.weixin.qq.com/s?__biz=MzA3MTg4NjY4Mw==&mid=2457305371&idx=4&sn=18b0b2ca1664a36d9e169181a10f384d&chksm=88a5932fbfd21a39d868e41f188f10cfcfa896beaaf557a76d624c68f729cbb532d9d46c699c&mpshare=1&scene=1&srcid=&sharer_sharetime=1589101018938&sharer_shareid=18c156b37f741bf9989098e28bf33e09&exportkey=AZfeYXiPtokCLySNIgspTic%3D&pass_ticket=tfYZpZ5RO1d48B60HKSXYrT7x8JNv2IfYePviC1pCIKiIdzLZfU3U6Afn%2FAuElEZ#rd

感谢出题者,如有冒犯,请与我联系,希望和大家一起学习交流。(目前使用oracle数据库环境编写sql)

题目

有如下一张表T

SQL每日一题(20200509)

 

想要得到如下结果:

SQL每日一题(20200509)

解释: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)

上一篇:10.Django-数据库操作与ORM模型


下一篇:httprunner基础(二)实现单接口参数化