sql >> Database >  >> RDS >> Mysql

Hoe te voorkomen dat u deelt door nul in MySQL

Probleem:

U wilt de deling-door-nul-fout vermijden.

Voorbeeld:

Onze database heeft een tabel met de naam numbers met gegevens in de kolommen id , number_a , en number_b .

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

Laten we number_a delen door number_b en toon de tabel met een nieuwe kolom, divided , met het resultaat van de deling.

Oplossing 1:

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

Oplossing 2:

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

Het resultaat is:

id nummer_a number_b verdeeld
1 4 0 NULL
2 57 -5 -11.4.000
3 -7 56 -0.1250
4 -67 0 NULL
5 23 55 0.4182
6 -8 -4 2.000

Oplossing 3:

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

Het resultaat is:

id nummer_a number_b verdeeld
2 57 -5 -11.4.000
3 -7 56 -0.1250
5 23 55 0.4182
6 -8 -4 2.000

Discussie:

De eerste oplossing gebruikt de NULLIF() functie, die twee getallen als argumenten nodig heeft. Als het eerste argument gelijk is aan het andere argument, retourneert de functie NULL als gevolg. Als number_b is gelijk aan nul, de deler is NULL , en het resultaat van de deling is NULL .

De tweede oplossing gebruikt de CASE uitspraak. Als de voorwaarde na de WHEN trefwoord is waar (in ons geval is de voorwaarde number_b = 0 ), specificeren we dat NULL moet worden geretourneerd. Anders gebeurt de verdeling zoals gewoonlijk.

De derde oplossing gebruikt gewoon de WHERE voorwaarde om de rijen uit te filteren waar number_b nul is. De rijen met number_b gelijk aan nul ontbreken in de resultatenset.


  1. Hoe kan ik meerdere rijen invoegen in orakel met een reekswaarde?

  2. mysql selecteer top n max waarden

  3. Draaitabel en kolommen samenvoegen

  4. sql-query om verschillen tussen twee tabellen te retourneren