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

Dremel SQL中CASE WHEN多条件计数异常,求80-91区间正确统计方法

问题分析与解决方案

嘿,问题出在你写条件的方式上——SQL不支持像80 < x < 91这种连续比较的语法哦!

为什么原来的语句会返回总记录数?

在SQL里,80 < ROUND((offer_percent*100),1) < 91会被解析成(80 < ROUND((offer_percent*100),1)) < 91。而SQL会把布尔表达式的结果转换成数值:true是1,false是0。不管前面的比较结果是0还是1,它们都小于91,所以这个条件永远为真,自然就统计了所有符合id IN ($id)的记录,也就是总条数10。

修正后的查询语句

你需要用AND把两个比较条件分开,明确表达“大于80且小于91”的逻辑。另外,为了避免重复计算ROUND函数(提升效率),可以用子查询先处理百分比:

SELECT 
    SUM(CASE WHEN rounded_percent > 90 THEN 1 ELSE 0 END) AS MoreThan90,
    SUM(CASE WHEN rounded_percent > 80 AND rounded_percent < 91 THEN 1 ELSE 0 END) AS LessThan90
FROM (
    SELECT ROUND((offer_percent * 100), 1) AS rounded_percent
    FROM approval_state
    WHERE id IN ($id)
) AS subquery

如果不想用子查询,直接修改原语句的条件也可以:

SELECT 
    SUM(CASE WHEN ROUND((offer_percent*100),1) > 90 THEN 1 ELSE 0 END) AS MoreThan90,
    SUM(CASE WHEN ROUND((offer_percent*100),1) > 80 AND ROUND((offer_percent*100),1) < 91 THEN 1 ELSE 0 END) AS LessThan90
FROM approval_state
WHERE id IN ($id)

这样就能正确统计出你预期的2条记录啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:38:04