Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak uniknąć dzielenia przez zero w MySQL

Problem:

Chcesz uniknąć błędu dzielenia przez zero.

Przykład:

Nasza baza danych zawiera tabelę o nazwie numbers z danymi w kolumnach id , number_a i number_b .

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

Podzielmy number_a przez number_b i pokaż tabelę z nową kolumną, divided , z wynikiem dzielenia.

Rozwiązanie 1:

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

Rozwiązanie 2:

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

Wynik:

id numer_a number_b podzielony
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,000

Rozwiązanie 3:

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

Wynik:

id numer_a number_b podzielony
2 57 -5 -11.4000
3 -7 56 -0,1250
5 23 55 0.4182
6 -8 -4 2,000

Dyskusja:

Pierwsze rozwiązanie wykorzystuje NULLIF() funkcja, która przyjmuje jako argumenty dwie liczby. Gdy pierwszy argument jest równy drugiemu argumentowi, funkcja zwraca NULL w rezultacie. Jeśli number_b jest równy zero, dzielnik to NULL , a wynikiem dzielenia jest NULL .

Drugie rozwiązanie wykorzystuje CASE oświadczenie. Jeśli warunek po WHEN słowo kluczowe jest prawdziwe (w naszym przypadku warunek to number_b = 0 ), określamy, że zostanie zwrócone NULL. W przeciwnym razie podział przebiega jak zwykle.

Trzecie rozwiązanie po prostu używa WHERE warunek, aby odfiltrować wiersze, w których number_b wynosi zero. Wiersze z number_b w zestawie wyników brakuje wartości równej zero.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Importuj dane z arkusza kalkulacyjnego Excel lub CVS do MySQL

  2. Jak przekonwertować czas MySQL

  3. Czy mysql_real_escape_string() i mysql_escape_string() są wystarczające do zapewnienia bezpieczeństwa aplikacji?

  4. Jak liczyć elementy na liście oddzielonej przecinkami MySQL

  5. Inżynieria wsteczna bazy danych MySQL przy użyciu MySQL Workbench