Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách tránh phân chia theo 0 trong MySQL

Vấn đề:

Bạn muốn tránh lỗi chia cho không.

Ví dụ:

Cơ sở dữ liệu của chúng tôi có một bảng có tên là numbers với dữ liệu trong các cột id , number_anumber_b .

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

Hãy chia number_a bởi number_b và hiển thị bảng với một cột mới, divided , với kết quả của phép chia.

Giải pháp 1:

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

Giải pháp 2:

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

Kết quả là:

id number_a number_b chia
1 4 0 KHÔNG ĐẦY ĐỦ
2 57 -5 -11.4000
3 -7 56 -0,1250
4 -67 0 KHÔNG ĐẦY ĐỦ
5 23 55 0,4182
6 -8 -4 2.0000

Giải pháp 3:

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

Kết quả là:

id number_a number_b chia
2 57 -5 -11.4000
3 -7 56 -0,1250
5 23 55 0,4182
6 -8 -4 2.0000

Thảo luận:

Giải pháp đầu tiên sử dụng NULLIF() hàm, nhận hai số làm đối số. Khi đối số đầu tiên bằng đối số khác, hàm trả về NULL kết quả là. Nếu number_b bằng 0, ước số là NULL và kết quả của phép chia là NULL .

Giải pháp thứ hai sử dụng CASE tuyên bố. Nếu điều kiện sau WHEN từ khóa là đúng (trong trường hợp của chúng tôi, điều kiện là number_b = 0 ), chúng tôi chỉ định rằng NULL được trả về. Nếu không, việc phân chia diễn ra như bình thường.

Giải pháp thứ ba chỉ cần sử dụng WHERE điều kiện để lọc ra các hàng có number_b là số không. Các hàng có number_b bằng 0 bị thiếu trong tập kết quả.


  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:Nhiều hàng dưới dạng hàng đơn được phân tách bằng dấu phẩy

  2. triển khai truy vấn LIKE trong PDO

  3. Lỗi MySql:Không thể cập nhật bảng trong hàm / trình kích hoạt được lưu trữ vì nó đã được sử dụng bởi câu lệnh gọi hàm / trình kích hoạt được lưu trữ này

  4. Cách dễ nhất để thêm nhiều không gian vào một chuỗi trong MySQL - SPACE ()

  5. Ví dụ về UTC_TIME - MySQL