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

如何用MySQL SELECT语句将超100的值返回为100并保留原值?

解决MySQL查询中截断数值到100的问题

嘿,我明白你的需求了——你想把activities表中steps字段超过100的值统一返回为100,低于100的保留原始数值,但你的查询语句出了点小问题,导致低于100的值返回成0了对吧?

问题出在哪?

你写的CASE语句里,ELSE部分的o.steps < o.steps是个布尔判断:

CASE WHEN o.steps > 100 THEN 100 ELSE o.steps < o.steps END

这个表达式o.steps < o.steps永远是false(一个数不可能小于它自己),而MySQL会把布尔值转换成整数,false对应0,这就是为什么低于100的值都返回0了。

正确的写法

只需要把ELSE部分改成直接返回o.steps就行,这才是你想要的“保留原始值”的逻辑:

SELECT 
    o.steps, 
    o.encodedid, 
    CASE 
        WHEN o.steps > 100 THEN 100 
        ELSE o.steps 
    END AS result 
FROM activities o

更简洁的替代方案

MySQL提供了LEAST()函数,它会返回传入参数中的最小值,用这个函数可以一行搞定需求,代码更简洁:

SELECT 
    o.steps, 
    o.encodedid, 
    LEAST(o.steps, 100) AS result 
FROM activities o

这个函数的逻辑就是:如果steps小于100,就返回steps本身;如果大于100,就返回100,完全符合你的要求。

关于程序处理的疑问

完全不需要先把数据查出来再用程序处理!上面的SQL语句已经能直接完成你想要的逻辑,直接运行就能得到正确的结果啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:16:48