编写查询最大唯一数的SQL时,UNION ALL语法报错求助
问题分析与解决
语法错误原因
你写的SQL报错是因为MySQL不允许在UNION/UNION ALL的单个子查询中使用ORDER BY,除非该子查询同时搭配LIMIT。原语句中第一个子查询只有ORDER BY没有LIMIT,也没有用括号包裹,导致语法解析失败。
修正后的写法
写法一:修正原逻辑的语法问题
给第一个子查询添加括号和LIMIT 1,确保它只返回最大的唯一数字,再通过UNION ALL拼接NULL,最后整体取第一条结果:
(SELECT num FROM MyNumbers GROUP BY num HAVING COUNT(num) = 1 ORDER BY num DESC LIMIT 1) UNION ALL SELECT NULL AS num LIMIT 1
写法二:更简洁的聚合函数方案
利用聚合函数MAX的特性(当输入集合为空时返回NULL),直接嵌套子查询实现需求,逻辑更清晰且性能更优:
SELECT MAX(num) AS num FROM ( SELECT num FROM MyNumbers GROUP BY num HAVING COUNT(num) = 1 ) AS unique_nums
这个方案的逻辑是:先通过子查询筛选出所有仅出现一次的数字,再在外层取这些数字的最大值;如果没有符合条件的数字,子查询返回空集,MAX函数自然返回NULL,完全匹配需求。
内容的提问来源于stack exchange,提问作者Yinan Wu
相关产品推荐
相关产品推荐

