在MySQL中,此查询可能会抛出除以零的错误:
SELECT ROUND(noOfBoys / noOfGirls) AS ration
FROM student;
Run Code Online (Sandbox Code Playgroud)
如果noOfGirls是0则则计算失败.
处理这个问题的最佳方法是什么?
我想有条件改变的值noOfGirls来1时,它等于0.
有没有更好的办法?
Ica*_*rus 15
是的,你可以做一个案例:
select case when noOfGirls=0 then noOfBoys
else round(noOfBoys/noOfGirls) end as ration
from student;
Run Code Online (Sandbox Code Playgroud)
但你可能想要:
select case when noOfGirls=0 then 1
else round(noOfBoys/noOfGirls) end as ration
from student;
Run Code Online (Sandbox Code Playgroud)
Rom*_*ain 12
您可以使用此(过度表达)方式:
select IF(noOfGirls=0, NULL, round(noOfBoys/noOfGirls)) as ration from student;
Run Code Online (Sandbox Code Playgroud)
如果没有女孩,那将会输出NULL,这实际上是SQL语义中的0/0应该是什么.
NULL如果你尝试做的话0/0,MySQL无论如何都会给出,因为SQL意思NULL是"没有数据",或者在这种情况下"我不知道这个值是什么".
GREATEST(x, 1)
可以使用,因为女孩的数量必须为正数:
SELECT ROUND(noOfBoys / GREATEST(noOfGirls, 1)) AS ration FROM student;
Run Code Online (Sandbox Code Playgroud)
但它在 SQL 实现之间的可移植性不太好。
文档:http ://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_greatest