In MySQL, this query might throw a division by zero error:
SELECT ROUND(noOfBoys / noOfGirls) AS ration
FROM student;
If noOfGirls
GREATEST(x, 1)
Can be used since the number of girls must be positive:
SELECT ROUND(noOfBoys / GREATEST(noOfGirls, 1)) AS ration FROM student;
But it is not very portable across SQL implementations.
Documentation: http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_greatest
Well if you want to set noOfGirls to 1 if it's 0, then the following should work:
SELECT ROUND(noOfBoys / if(noOfGirls, noOfGirls, 1)) as ration FROM student;
check if the denominator is zero and the nominator is not NULL - if yes then use 'NaN'.
Division by NULL
actually works in MySQL server and returns NULL
. So you can do:
SELECT ROUND(noOfBoys / NULLIF(noOfGirls, 0)) AS ration FROM student;
I think NULL
ratio is the most accurate for this case. If you need the ratio to be equal to numOfBoys
then you can use:
SELECT COALESCE(ROUND(noOfBoys / NULLIF(noOfGirls, 0)), noOfBoys) AS ration FROM student;
You can use this (over-expressive) way:
select IF(noOfGirls=0, NULL, round(noOfBoys/noOfGirls)) as ration from student;
Which will put out NULL if there are no girls, which is effectively what 0/0 should be in SQL semantics.
MySQL will anyway give NULL
if you try to do 0/0
, as the SQL meaning fo NULL
is "no data", or in this case "I don't know what this value can be".
select
case student.noOfGirls
when 0 then 1
else round(noOfBoys/noOfGirls)
end as ration
from
`student`