Mysql
 sql >> Database >  >> RDS >> Mysql

Come evitare di dividere per zero in MySQL

Problema:

Vorresti evitare l'errore di divisione per zero.

Esempio:

Il nostro database ha una tabella denominata numbers con i dati nelle colonne id , number_a e number_b .

id numero_a numero_b
1 4 0
2 57 -5
3 -7 56
4 -67 0
5 23 55
6 -8 -4

Dividiamo number_a per number_b e mostra la tabella con una nuova colonna, divided , con il risultato della divisione.

Soluzione 1:

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

Soluzione 2:

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

Il risultato è:

id numero_a numero_b diviso
1 4 0 NULLO
2 57 -5 -11.4000
3 -7 56 -0,1250
4 -67 0 NULLO
5 23 55 0,4182
6 -8 -4 2.0000

Soluzione 3:

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

Il risultato è:

id numero_a numero_b diviso
2 57 -5 -11.4000
3 -7 56 -0,1250
5 23 55 0,4182
6 -8 -4 2.0000

Discussione:

La prima soluzione utilizza NULLIF() funzione, che accetta due numeri come argomenti. Quando il primo argomento è uguale all'altro argomento, la funzione restituisce NULL di conseguenza. Se number_b è uguale a zero, il divisore è NULL e il risultato della divisione è NULL .

La seconda soluzione utilizza il CASE dichiarazione. Se la condizione dopo il WHEN la parola chiave è vera (nel nostro caso, la condizione è number_b = 0 ), specifichiamo che NULL deve essere restituito. In caso contrario, la divisione avviene come al solito.

La terza soluzione usa semplicemente il WHERE condizione per filtrare le righe in cui number_b è zero. Le righe con number_b uguale a zero mancano dal set di risultati.