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

SQL中含CASE子句的聚合运算求和与除法语法问题排查

问题分析与修正

为什么返回10?

你的代码存在两个关键问题,直接导致结果与预期不符:

  1. 运算顺序错误:没有给「sum(tb1.col1) + count(...)」整体添加括号,SQL会优先执行除法运算 count(...) / sum(tb1.col3),再将结果与sum(tb1.col1)相加。
  2. CASE WHEN条件不匹配测试数据:测试数据中tb2.col2的值是5,但你的条件判断是tb2.col2 = 1,这导致count(...)返回0(没有符合条件的行)。0除以50仍为0,最终结果就是10 + 0 = 10。

如何得到期望的0.3?

从你期望的公式(10+5)/50=0.3来看,你实际需要的是将tb2.col2的值(而非符合条件的行数)加到sum(tb1.col1)中,而非“计数”。结合运算顺序修正,正确代码如下:

round( (sum(tb1.col1) + sum(case when tb2.col2 = 5 then tb2.col2 else 0 end)) / sum(tb1.col3), 2 )

如果你的业务逻辑确实是统计符合条件的行数(比如测试数据中的5是笔误,实际应为1),则修正条件和运算顺序后的代码为:

round( (sum(tb1.col1) + count(case when tb2.col2 = 1 then 1 else null end)) / sum(tb1.col3), 2 )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:36:25