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

如何编写SQL按TYPE规则计算成本:A类加、B类减并实现筛选分组

正确的SQL实现方案

嘿,我来帮你搞定这个成本计算的需求!首先得指出你原来SQL里的一个小坑:AND TR.TYPE = 'A' OR TR.TYPE = 'B' 这个条件的优先级有问题——SQL里AND的优先级比OR高,原语句会被解析成(NO in (...) AND TR.TYPE='A') OR TR.TYPE='B',这会导致所有TYPE='B'的记录不管NO是否在USERS表里都会被统计,显然不符合需求。

接下来是核心的成本计算逻辑调整:我们需要根据TYPE决定COST是加还是减,用CASE WHEN就能完美实现这个逻辑,再对处理后的数值求和即可。

完整的SQL语句

SELECT 
    NO, 
    SUM(CASE 
            WHEN TR.TYPE = 'A' THEN COST 
            WHEN TR.TYPE = 'B' THEN -COST 
            ELSE 0  -- 若存在其他TYPE,可在这里定义默认处理规则,比如不计入总成本
        END) AS TOTAL_COST
FROM TR
WHERE 
    NO IN (SELECT NO FROM USERS)
    AND (TR.TYPE = 'A' OR TR.TYPE = 'B')  -- 用括号包裹OR条件,确保逻辑正确性
GROUP BY NO;

示例数据验证

用你提供的TR_TABLE数据测试:

  • NO=1的计算:1000(A)-500(B)+200(A)=700
  • NO=2的计算:100(A)=100
    完全匹配你期望的结果。

另外,如果你觉得写法可以更简洁,也可以用这个等价写法:

SELECT 
    NO, 
    SUM(COST * CASE WHEN TR.TYPE = 'A' THEN 1 ELSE -1 END) AS TOTAL_COST
FROM TR
WHERE 
    NO IN (SELECT NO FROM USERS)
    AND (TR.TYPE = 'A' OR TR.TYPE = 'B')
GROUP BY NO;

两种写法效果一致,看你个人习惯哪种更易读。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 17:37:28