You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何MySQL查询无法返回NULL?LeetCode单值最大数问题排查

问题解答:最大单一数字查询的问题分析

为什么两种写法都不生效?

你的两段SQL语句中,HAVING COUNT(num) = 1已经将所有重复数字过滤掉了。当测试用例里所有数字都重复时,这个过滤条件会导致没有任何行进入后续的SELECT、ORDER BY和LIMIT环节。此时整个查询的结果集是空的,不管你用CASE还是IFNULL,这些都是行级别的处理函数——没有行的话,这些函数根本不会执行,自然无法生成包含NULL的行。

关于IFNULL(num, null)的求值逻辑

当没有符合条件的行时,IFNULL(num, null)根本不会被触发执行。因为IFNULL是对查询结果中每一行的num字段进行判断:如果该行的num是NULL,就替换成第二个参数;但如果连行都没有,就没有num值可以传入这个函数,自然不会产生任何输出。

正确的写法示例

要实现「无符合条件行时返回一行NULL」的需求,需要保证查询至少返回一行结果,推荐两种思路:

思路1:利用聚合函数的特性

聚合函数(如MAX)在处理空集时会返回NULL,结合子查询实现:

SELECT MAX(num) AS num
FROM (
    SELECT num
    FROM MyNumbers
    GROUP BY num
    HAVING COUNT(num) = 1
) AS single_nums;

子查询负责筛选出所有只出现一次的数字,外层用MAX取最大的那个;如果子查询是空集,MAX就会返回NULL,正好符合需求。

思路2:用UNION ALL补充默认行

通过UNION ALL添加一行NULL,再取第一行结果:

SELECT num
FROM (
    SELECT num
    FROM MyNumbers
    GROUP BY num
    HAVING COUNT(num) = 1
    ORDER BY num DESC
    LIMIT 1
    UNION ALL
    SELECT NULL
) AS result
LIMIT 1;

如果子查询有结果,就返回最大的单一数字;如果没有,就返回UNION添加的NULL行。

内容的提问来源于stack exchange,提问作者Zephyr_8

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 08:31:02