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
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