SQL每日一题(20200509)
Posted 田灬禾-不忘初心,方得始終
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL每日一题(20200509)相关的知识,希望对你有一定的参考价值。
感谢出题者,如有冒犯,请与我联系,希望和大家一起学习交流。(目前使用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数据分析题(含数据和代码)