Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So vermeiden Sie die Division durch Null in MySQL

Problem:

Sie möchten den Division-durch-Null-Fehler vermeiden.

Beispiel:

Unsere Datenbank hat eine Tabelle namens numbers mit Daten in den Spalten id , number_a , und number_b .

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

Teilen wir number_a von number_b und zeige die Tabelle mit einer neuen Spalte, divided , mit dem Ergebnis der Division.

Lösung 1:

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

Lösung 2:

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

Das Ergebnis ist:

id Nummer_a Zahl_b geteilt
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

Lösung 3:

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

Das Ergebnis ist:

id Nummer_a Zahl_b geteilt
2 57 -5 -11.4000
3 -7 56 -0,1250
5 23 55 0,4182
6 -8 -4 2.0000

Diskussion:

Die erste Lösung verwendet NULLIF() Funktion, die zwei Zahlen als Argumente akzeptiert. Wenn das erste Argument gleich dem anderen Argument ist, gibt die Funktion NULL zurück infolge. Wenn number_b gleich Null ist, ist der Divisor NULL , und das Ergebnis der Division ist NULL .

Die zweite Lösung verwendet den CASE Erklärung. Wenn die Bedingung nach dem WHEN Schlüsselwort ist wahr (in unserem Fall ist die Bedingung number_b = 0). ), geben wir an, dass NULL zurückgegeben wird. Ansonsten erfolgt die Teilung wie gewohnt.

Die dritte Lösung verwendet einfach das WHERE Bedingung, um die Zeilen herauszufiltern, in denen number_b ist Null. Die Zeilen mit number_b gleich Null fehlen in der Ergebnismenge.