Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да избегнем деленето на нула в MySQL

Проблем:

Искате да избегнете грешката при деление на нула.

Пример:

Нашата база данни има таблица с име numbers с данни в колоните id , number_a и number_b .

id число_a число_b
1 4 0
2 57 -5
3 -7 56
4 -67 0
5 23 55
6 -8 -4

Нека разделим number_a от number_b и покажете таблицата с нова колона, divided , с резултата от деленето.

Решение 1:

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

Решение 2:

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

Резултатът е:

id число_a число_b разделен
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

Решение 3:

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

Резултатът е:

id число_a число_b разделен
2 57 -5 -11,4000
3 -7 56 -0,1250
5 23 55 0,4182
6 -8 -4 2 0000

Дискусия:

Първото решение използва NULLIF() функция, която приема две числа като аргументи. Когато първият аргумент е равен на другия аргумент, функцията връща NULL като резултат. Ако number_b е равно на нула, делителят е NULL , а резултатът от разделянето е NULL .

Второто решение използва CASE изявление. Ако условието след WHEN ключовата дума е вярна (в нашия случай условието е number_b = 0 ), указваме, че NULL се връща. В противен случай разделянето става както обикновено.

Третото решение просто използва WHERE условие за филтриране на редовете, където number_b е нула. Редовете с number_b равни на нула липсват в резултатния набор.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL Изберете дата, равна на днес

  2. MySQL ограничения на външния ключ, каскадно изтриване

  3. MySQL:Предоставяне на **всички** привилегии на база данни

  4. PDO получава последния вмъкнат идентификатор

  5. PHP формат date() при вмъкване в datetime в MySQL