You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询实现从单条数据生成金额逐行递增8%的6行结果

生成递增8%的6行数据的SQL解决方案

这里有两种实用的方法来实现你要的效果,都能精准生成那6行金额递增8%的数据:

方法一:递归CTE(推荐,灵活扩展性强)

递归CTE是生成序列数据的绝佳工具,尤其适合这种需要基于前一行计算后一行的场景。下面的查询会从你的money表中取出目标数据,然后递归生成后续行:

WITH RECURSIVE amount_series AS (
    -- 锚点:取出原始数据作为第一行
    SELECT 
        AMOUNT,
        ID,
        1 AS row_num
    FROM money
    WHERE ID = 'AAA' AND AMOUNT = 100.00
    
    UNION ALL
    
    -- 递归:计算下一行的金额,直到生成6行
    SELECT 
        ROUND(prev.AMOUNT * 1.08, 2) AS AMOUNT,
        prev.ID,
        prev.row_num + 1 AS row_num
    FROM amount_series prev
    WHERE prev.row_num < 6
)
SELECT AMOUNT, ID
FROM amount_series;

代码解释:

  • 锚点成员:精准定位到money表中ID为AAA、金额为100.00的那条数据,作为序列的起始行,同时用row_num标记当前是第几行。
  • 递归成员:基于上一行的金额乘以1.08(实现8%递增),用ROUND()函数保留两位小数,行号加1。递归会一直执行到row_num等于6时停止。
  • 最后从递归CTE中查询结果,就能得到你预期的6行数据。

方法二:数字序列表(适合固定行数的简单场景)

如果你的数据库版本不支持递归CTE(比如MySQL 8.0之前的版本),可以用硬编码的数字序列来直接计算每一行的金额:

SELECT 
    ROUND(100.00 * POWER(1.08, n - 1), 2) AS AMOUNT,
    'AAA' AS ID
FROM (
    -- 生成1到6的数字序列
    SELECT 1 AS n UNION ALL SELECT 2 UNION ALL SELECT 3
    UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6
) AS number_list;

代码解释:

  • 子查询number_list生成了1到6的数字,对应我们需要的6行数据。
  • 用POWER(1.08, n-1)计算递增倍数:第1行是100*(1.08)0=100,第2行是100*(1.08)1=108,以此类推,最后用ROUND()保留两位小数。

两种方法都能输出你要的结果:

100.00 AAA、108.00 AAA、116.64 AAA、125.97 AAA、136.04 AAA、146.93 AAA

内容的提问来源于stack exchange,提问作者Volcano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:56:02