valores tipos sentencias que por numero lista infinito existe entre dividir dividido demuestre dato consultas comandos clausula cero buscar atributos mysql sql

tipos - sentencias mysql



Cómo manejar condicionalmente la división por cero con MySQL (6)

En MySQL, esta consulta puede generar un error de división por cero:

SELECT ROUND(noOfBoys / noOfGirls) AS ration FROM student;

Si noOfGirls es 0 , el cálculo falla.

¿Cuál es la mejor manera de manejar esto?

Me gustaría cambiar condicionalmente el valor de noOfGirls a 1 cuando es igual a 0 .

¿Hay alguna manera mejor?


Bueno, si quieres establecer noOfGirls en 1 si es 0, entonces debería funcionar lo siguiente:

SELECT ROUND(noOfBoys / if(noOfGirls, noOfGirls, 1)) as ration FROM student;


Puedes usar esta forma (sobre-expresiva):

select IF(noOfGirls=0, NULL, round(noOfBoys/noOfGirls)) as ration from student;

Lo que sacará NULL si no hay chicas, que es efectivamente lo que 0/0 debería ser en la semántica de SQL.

De todos modos, MySQL dará NULL si intenta hacer 0/0 , ya que el significado de SQL para NULL es "sin datos", o en este caso "No sé cuál puede ser este valor".


Sí, puedes hacer un caso:

select case when noOfGirls=0 then noOfBoys else round(noOfBoys/noOfGirls) end as ration from student;

Pero probablemente quieras:

select case when noOfGirls=0 then 1 else round(noOfBoys/noOfGirls) end as ration from student;


verifique si el denominador es cero y el nominador no es NULL - si es así, use ''NaN''.



select case student.noOfGirls when 0 then 1 else round(noOfBoys/noOfGirls) end as ration from `student`