如何避免"SELECT max(rank) FROM test"对空表产生空结果?

mysqlmysqli database

您可以使用 COALESCE() 和聚合函数 MAX() 来实现这一点。

语法如下

SELECT COALESCE(MAX(`yourColumnName`), 0) FROM yourTableName;

为了理解上述语法,让我们创建一个表。创建表的查询如下

mysql> create table avoidNullDemo
   -> (
   -> `rank` int
   -> );
Query OK, 0 rows affected (0.53 sec)

使用 insert 命令在表中插入一些记录。

查询如下

mysql> insert into avoidNullDemo values(10);
Query OK, 1 row affected (0.20 sec)
mysql> insert into avoidNullDemo values(NULL);
Query OK, 1 row affected (0.18 sec)
mysql> insert into avoidNullDemo values(20);
Query OK, 1 row affected (0.17 sec)
mysql> insert into avoidNullDemo values(NULL);
Query OK, 1 row affected (0.11 sec)
mysql> insert into avoidNullDemo values(100);
Query OK, 1 row affected (0.11 sec)
mysql> insert into avoidNullDemo values(NULL);
Query OK, 1 row affected (0.16 sec)

使用 select 语句显示表中的所有记录。

查询如下

mysql> select *from avoidNullDemo;

以下是具有 NULL 值的输出

+------+
| rank |
+------+
| 10   |
| NULL |
| 20   |
| NULL |
| 100  |
| NULL |
+------+
6 rows in set (0.00 sec)

这是避免空结果的查询

mysql> select COALESCE(MAX(`rank`), 0) FROM avoidNullDemo;

以下是输出 −

+--------------------------+
| COALESCE(MAX(`rank`), 0) |
+--------------------------+
| 100                      |
+--------------------------+
1 row in set (0.00 sec)

这是表为空的情况。

让我们从上面的表中删除所有记录。

查询如下

mysql> truncate table AvoidNullDemo;
Query OK, 0 rows impacted (0.92 sec)

现在上面的表是空的。让我们对空表执行上述查询

mysql> select COALESCE(MAX(`rank`), 0) FROM avoidNullDemo;

以下是输出 −

+--------------------------+
| COALESCE(MAX(`rank`), 0) |
+--------------------------+
| 0                        |
+--------------------------+
1 row in set (0.00 sec)

相关文章