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

SQL如何根据指定规则计算含月度利息的客户总交易金额

问题诊断

原SQL存在3处核心逻辑错误:

  • 统计范围错误:豁免条件要求统计的是「存款交易」(amount为负)的累计金额和次数,原SQL把取款交易也纳入统计,完全不符合业务规则
  • 累计存款计算错误:累计存款≥100美元是指所有存款金额的绝对值之和≥100,原SQL直接SUM(amount)混合了存取款,判断条件SUM(amount) >=-100完全不成立
  • 利息触发逻辑写反:仅不满足豁免条件时才需要加收5美元利息,原SQL写的是满足条件时加5,逻辑完全颠倒

正确实现思路

  1. 按月份分组统计每个月的三类数据:
    • 当月所有交易的总金额
    • 当月存款(amount<0)的累计金额(取绝对值)
    • 当月存款的交易次数
  2. 判断是否满足豁免条件:存款累计≥100 且 存款次数≥3,不满足则总金额加5美元利息
  3. 最后汇总所有月份的金额得到客户总交易金额

正确SQL代码

版本1:带月度明细方便核对

WITH monthly_stats AS (
    SELECT
        MONTH(Date) AS [Month],
        SUM(amount) AS total_trans_amount,
        SUM(CASE WHEN amount < 0 THEN -amount ELSE 0 END) AS total_deposit,
        COUNT(CASE WHEN amount < 0 THEN 1 END) AS deposit_count
    FROM customer_table
    GROUP BY MONTH(Date)
)
SELECT SUM(
    CASE WHEN total_deposit >= 100 AND deposit_count >=3 
         THEN total_trans_amount
         ELSE total_trans_amount + 5
    END
) AS final_total_amount
FROM monthly_stats;

版本2:直接汇总一步计算

SELECT SUM(
    monthly_amount + CASE WHEN is_exempt = 1 THEN 0 ELSE 5 END
) AS final_total_amount
FROM (
    SELECT
        SUM(amount) AS monthly_amount,
        CASE WHEN SUM(CASE WHEN amount <0 THEN -amount ELSE 0 END) >=100 
                  AND COUNT(CASE WHEN amount <0 THEN 1 END) >=3
             THEN 1 ELSE 0 END AS is_exempt
    FROM customer_table
    GROUP BY MONTH(Date)
) t

结果验证

使用给定测试数据计算,最终总交易金额为1143.5,可通过月度明细自行核对逻辑正确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:27:03