如何避免"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)