SQL如何求解等比数列问题?

点击上方SQL数据库开发,关注获取SQL视频教程

SQL专栏

SQL数据库基础知识汇总

SQL数据库高级知识汇总

问题描述

一家公司第一天给你1分钱,第二天给你2分钱,第三天给你4分钱,依次类推到第30天一共给你多少钱?

问题分析

这是一个典型的等比数列的问题,我们可以借助等比数列的公式使用WHILE循环,还有CTE递归方法来求解

WHILE求解

--定义变量
DECLARE @i DECIMAL (18, 2) = 0.01, --初始为第1天0.01元
@total DECIMAL (18, 2) = 0,
@m INT = 2, --@m为每天翻多少倍
@n INT = 2, --@n为第几天,因为是第2天才开始翻倍,所以初始设为2
@Max INT = 30 --@Max为截止翻倍的那天

WHILE @n <= @Max
BEGIN
 SELECT @i = @i * @m --计算当天多少钱
 SELECT @total = @total + @i --计算截至当天总共多少钱
 SELECT @n = @n + 1 --循环变量累加1天
 END 
--输出信息
SELECT @total

(提示:可以左右滑动代码)


结果如下:

640?wx_fmt=png

我们再尝试用递归查询来求解这个问题

CTE递归求解

WITH CTE (n, i, total) AS (
 SELECT 1
 ,CAST (0.01 AS DECIMAL(18, 2)) --第1天只有0.01元
 ,CAST (0.01 AS DECIMAL(18, 2)) --第1天当天总共0.01元
 UNION ALL
 SELECT n + 1 --n加1天
 ,CAST (i * 2 AS DECIMAL(18, 2)) --第n + 1天有多少钱
 ,CAST (total + i * 2 AS DECIMAL (18, 2))
 --第n + 1天当天总共多少钱
 FROM CTE
 WHERE n < 30 --结束递归
)

SELECT * FROM CTE

结果如下:

SQL如何求解等比数列问题?_第1张图片

通过求解,我们发现如果一天一分钱这样等比发工资,到了第30天需要一共发你一千多万,估计老板会倾家荡产。

批注

等比数列问题很好的应用了循环计算,不管是WHILE循环还是,CTE递归查询,都是循环计算的一种。希望大家能够掌握这两个循环使用方法。

更多推荐
职场画饼实录
SQL如何求解连续年份的问题?
SQL如何处理这几个常见问题
       

公众号内回复1,拉你进微信交流群

长按下方二维码加入,我们的SQL训练营

SQL如何求解等比数列问题?_第2张图片

点击"阅读原文",了解SQL训练营

你可能感兴趣的:(SQL如何求解等比数列问题?)