SQL每日一题(20200509)

Posted 田灬禾-不忘初心,方得始終

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

想要得到如下结果:

解释: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)的主要内容,如果未能解决你的问题,请参考以下文章

每日一题:3个几乎面试必考的SQL数据分析题(含数据和代码)

每日一题:SQL之行转列和列转行

每日一题:SQL 中 row_number()rank()和dense_rank()有啥区别

LeetCode 1024. 视频拼接(每日一题)

SQL每日一题(20220303)及知识点总结

SQL每日一题(20200513)