Computer >> Máy Tính >  >> Lập trình >> MySQL

Làm cách nào để chọn sum hoặc 0 nếu không có bản ghi nào tồn tại trong MySQL?

Bạn có thể sử dụng hàm tổng hợp sum () bên trong COALESCE (). Cú pháp dưới đây trả về tổng của tất cả nếu bản ghi tồn tại, nếu không thì trả về 0. Cú pháp như sau.

select COALESCE(sum(yourColumnName2), 0) AS anyVariableName from yourTableName
where yourColumnName1 like '%yourValue%';

Để hiểu cú pháp trên, chúng ta hãy tạo một bảng. Truy vấn để tạo bảng như sau.

mysql> create table SumDemo
-> (
-> Words varchar(100),
-> Counter int
-> );
Query OK, 0 rows affected (0.93 sec)

Chèn một số bản ghi trong bảng bằng lệnh chèn. Truy vấn như sau.

mysql> insert into SumDemo values('Are You There',10);
Query OK, 1 row affected (0.16 sec)

mysql> insert into SumDemo values('Are You Not There',15);
Query OK, 1 row affected (0.13 sec)

mysql> insert into SumDemo values('Hello This is MySQL',12);
Query OK, 1 row affected (0.09 sec)

mysql> insert into SumDemo values('Hello This is not MySQL',14);
Query OK, 1 row affected (0.24 sec)

Hiển thị tất cả các bản ghi từ bảng bằng cách sử dụng câu lệnh select. Truy vấn như sau.

mysql> select *from SumDemo;

Sau đây là kết quả đầu ra.

+-------------------------+---------+
| Words                   | Counter |
+-------------------------+---------+
| Are You There           | 10      |
| Are You Not There       | 15      |
| Hello This is MySQL     | 12      |
| Hello This is not MySQL | 14      |
+-------------------------+---------+
4 rows in set (0.00 sec)

Đây là truy vấn cung cấp tổng số tiền bất cứ khi nào bản ghi tồn tại.

mysql> select COALESCE(sum(Counter), 0) AS SumOfAll from SumDemo where Words like '%hello%';

Sau đây là kết quả đầu ra.

+----------+
| SumOfAll |
+----------+
| 26       |
+----------+
1 row in set (0.00 sec)

Nếu bản ghi không tồn tại thì bạn sẽ nhận được 0. Truy vấn như sau.

mysql> select COALESCE(sum(Counter), 0) AS SumOfAll from SumDemo where Words like '%End of MySQL%';

Sau đây là kết quả đầu ra.

+----------+
| SumOfAll |
+----------+
| 0       |
+----------+
1 row in set (0.00 sec)