如何用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
相关产品推荐
相关产品推荐

