SQL >> Base de Datos >  >> RDS >> Mysql

Cómo evitar dividir por cero en MySQL

Problema:

Le gustaría evitar el error de división por cero.

Ejemplo:

Nuestra base de datos tiene una tabla llamada numbers con datos en las columnas id , number_a y number_b .

id número_a número_b
1 4 0
2 57 -5
3 -7 56
4 -67 0
5 23 55
6 -8 -4

Dividamos number_a por number_b y mostrar la tabla con una nueva columna, divided , con el resultado de la división.

Solución 1:

SELECT
	*,
	number_a / NULLIF(number_b, 0) AS divided
FROM numbers;

Solución 2:

SELECT
	*,
	CASE
WHEN number_b = 0
		THEN NULL
		ELSE number_a / number_b
	END AS divided
FROM numbers;

El resultado es:

id número_a número_b dividido
1 4 0 NULO
2 57 -5 -11.4000
3 -7 56 -0,1250
4 -67 0 NULO
5 23 55 0,4182
6 -8 -4 2,0000

Solución 3:

SELECT
	*,
	number_a / number_b AS divided
FROM numbers
WHERE number_b != 0;

El resultado es:

id número_a número_b dividido
2 57 -5 -11.4000
3 -7 56 -0,1250
5 23 55 0,4182
6 -8 -4 2,0000

Discusión:

La primera solución usa NULLIF() función, que toma dos números como argumentos. Cuando el primer argumento es igual al otro argumento, la función devuelve NULL como resultado. Si number_b es igual a cero, el divisor es NULL , y el resultado de la división es NULL .

La segunda solución usa el CASE declaración. Si la condición después de WHEN palabra clave es verdadera (en nuestro caso, la condición es number_b = 0 ), especificamos que se devuelva NULL. De lo contrario, la división ocurre como de costumbre.

La tercera solución simplemente usa WHERE condición para filtrar las filas donde number_b es cero Las filas con number_b igual a cero faltan en el conjunto de resultados.