Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment éviter de diviser par zéro dans MySQL

Problème :

Vous souhaitez éviter l'erreur de division par zéro.

Exemple :

Notre base de données a une table nommée numbers avec des données dans les colonnes id , number_a , et number_b .

identifiant numéro_a number_b
1 4 0
2 57 -5
3 -7 56
4 -67 0
5 23 55
6 -8 -4

Divisons number_a par number_b et affichez le tableau avec une nouvelle colonne, divided , avec le résultat de la division.

Solution 1 :

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

Solution 2 :

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

Le résultat est :

identifiant numéro_a nombre_b divisé
1 4 0 NULL
2 57 -5 -11.4000
3 -7 56 -0.1250
4 -67 0 NULL
5 23 55 0.4182
6 -8 -4 2.0000

Solution 3 :

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

Le résultat est :

identifiant numéro_a number_b divisé
2 57 -5 -11.4000
3 -7 56 -0.1250
5 23 55 0.4182
6 -8 -4 2.0000

Discussion :

La première solution utilise le NULLIF() fonction, qui prend deux nombres comme arguments. Lorsque le premier argument est égal à l'autre argument, la fonction renvoie NULL par conséquent. Si number_b est égal à zéro, le diviseur est NULL , et le résultat de la division est NULL .

La deuxième solution utilise le CASE déclaration. Si la condition après le WHEN mot clé est vrai (dans notre cas, la condition est number_b = 0 ), nous spécifions que NULL doit être retourné. Sinon, la division se déroule comme d'habitude.

La troisième solution utilise simplement le WHERE condition pour filtrer les lignes où number_b est zéro. Les lignes avec number_b égaux à zéro manquent dans le jeu de résultats.