如何使用MySQL有条件地处理除零

Pus*_*tal 20 mysql sql

在MySQL中,此查询可能会抛出除以零的错误:

SELECT ROUND(noOfBoys / noOfGirls) AS ration
FROM student;
Run Code Online (Sandbox Code Playgroud)

如果noOfGirls0则则计算失败.

处理这个问题的最佳方法是什么?

我想有条件改变的值noOfGirls1时,它等于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是"没有数据",或者在这种情况下"我不知道这个值是什么".


Cir*_*四事件 5

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