LeetCode‘最大唯一数’SQL查询问题:无唯一数时未返回null
问题原因及解决方案
原因分析
你的查询逻辑是先对num分组,筛选出仅出现一次的记录,再按num降序取第一条。当表中没有唯一数时,having count(num)=1会过滤掉所有分组,整个结果集变成空的。这时候ifnull(num,null)根本没有行可以处理,自然返回空表,而不是包含null的一行——因为ifnull是针对每一行的字段值处理,没有行的话它就没作用。
修正方案
方案一:用聚合函数MAX包裹子查询
聚合函数MAX在没有匹配数据时会直接返回null,刚好符合需求:
SELECT MAX(num) AS num FROM ( SELECT num FROM MyNumbers GROUP BY num HAVING COUNT(num) = 1 ) AS unique_nums;
子查询先找出所有唯一数,外层用MAX取最大值;如果子查询为空,MAX就返回null,最终会得到一行包含null的结果。
方案二:用IFNULL包裹原查询子句
把你的原查询作为子查询放在IFNULL里,确保无论子查询有没有结果,都能返回一行数据:
SELECT IFNULL( (SELECT num FROM MyNumbers GROUP BY num HAVING COUNT(num)=1 ORDER BY num DESC LIMIT 1), NULL ) AS num;
如果子查询能找到最大的唯一数就返回它,找不到就返回null,最终结果始终是一行。
内容的提问来源于stack exchange,提问作者Kiran Kutte
相关产品推荐
相关产品推荐

