在SELECT中,我进行了一些计算(求和,最小值,ifnull,乘法和减法),其中涉及几个列(我们称其为someComplexCalc),并且如果结果小于0而不是我希望它变为0。 >
问题是由于性能下降,我不想重复someComplexCalc在一行中运行两次。我想要某种语句,该语句仅在结果小于0时才替换结果,否则将其保留,就像IFNULL(statement,0)的工作方式一样,没有THEN部分。
使用If语句,我不能这样做,也不能使用CASE
SELECT (IF someComplexCalc < 0, 0, someComplexCalc) AS result #someComplexCal runs twice (IF someComplexCalc < 0, 0) AS result #not working, than part is missing so it return NULL
答案 0 :(得分:3)
使用greatest()函数而不是if()
返回0或复杂计算中的较大者。
select greatest(complexcalc, 0) from yourtable
答案 1 :(得分:0)
带有用户定义的变量:
SELECT if( (@x:=5*4*3*2*1)<0, 0, @x) x;