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

SQL按指定条件统计用户有效PaidMonths总和的实现方案咨询

实现方案

不需要使用临时表,单条查询即可完成,逻辑简洁同时性能最优。

核心逻辑是通过CASE WHEN条件表达式按优先级处理单条支付记录的有效月数,再关联用户表分组求和即可,规则判断优先级如下:

  • 优先判断退款状态:Refunded = 1 时有效月数直接取0
  • 再判断支付金额:ValuePaid < 10 时有效月数固定取0.23
  • 其余场景直接取原表PaidMonths字段值

兼容主流数据库的SQL代码

SELECT 
  u.Userid,
  u.Name,
  SUM(
    CASE
      WHEN p.Refunded = 1 THEN 0
      WHEN p.ValuePaid < 10 THEN 0.23
      ELSE p.PaidMonths
    END
  ) AS paidMonths
FROM users u
LEFT JOIN payments p ON u.Userid = p.Userid
GROUP BY u.Userid, u.Name
ORDER BY u.Userid ASC;

补充说明

  • 用LEFT JOIN可以保证没有支付记录的用户也能出现在结果中,若只需统计有支付记录的用户,可替换为INNER JOIN
  • CASE WHEN的判断顺序严格匹配规则要求,计算结果和预期输出完全一致
  • 不需要额外的临时表、嵌套子查询,当前写法的可读性和执行效率都是最优的

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:54:00