Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como evitar dividir por zero no MySQL

Problema:


Você gostaria de evitar o erro de divisão por zero.

Exemplo:


Nosso banco de dados tem uma tabela chamada numbers com dados nas colunas id , number_a e 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

Vamos dividir number_a por number_b e mostre a tabela com uma nova coluna, divided , com o resultado da divisão.

Solução 1:

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

Solução 2:

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

O resultado é:
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

Solução 3:

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

O resultado é:
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

Discussão:


A primeira solução usa o NULLIF() função, que recebe dois números como argumentos. Quando o primeiro argumento é igual ao outro argumento, a função retorna NULL como resultado. Se number_b é igual a zero, o divisor é NULL , e o resultado da divisão é NULL .

A segunda solução usa o CASE demonstração. Se a condição após o WHEN palavra-chave é verdadeira (no nosso caso, a condição é number_b = 0 ), especificamos que NULL seja retornado. Caso contrário, a divisão acontece normalmente.

A terceira solução simplesmente usa o WHERE condição para filtrar as linhas onde number_b é zero. As linhas com number_b igual a zero estão faltando no conjunto de resultados.