我解决了一个 SQL 问题: 表:我的号码
+-------------+------+ |栏目名称 |类型 | +-------------+------+ |编号 |整数 | +-------------+------+ 该表没有主键。它可能包含重复项。 该表的每一行都包含一个整数。
单个号码是指在 MyNumbers 表中仅出现一次的号码。
编写一个 SQL 查询来报告最大的单个数字。如果没有单个号码,则报空。
示例1:
输入: 我的号码表: +-----+ |编号 | +-----+ | 8 | | 8 | | 3 | | 3 | | 1 | | 4 | | 5 | | 6 | +-----+ 输出: +-----+ |编号 | +-----+ | 6 | +-----+ 说明:单个数字是 1、4、5 和 6。 由于 6 是最大的单个数字,因此我们返回它。
我尝试使用UNION来解决这个问题:
选择号码 来自我的号码 按数字分组 有计数(num)=1 按编号 DESC 排序 联合所有 选择 NULL 作为数字 限制1
这是我的想法: 如果存在单个数字,则返回最大的数字。如果没有单个数字,则返回 NULL。
但是编译器显示了错误消息: 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在“UNION ALL”附近使用的正确语法 选择 NULL 作为数字 第 7 行 LIMIT 1'
我是SQL新手,不知道问题出在哪里。有人可以帮忙吗?谢谢!
当您有 UNION 查询时,ORDER BY 子句需要位于所有联合 SELECT 语句的末尾。
例如。
SELECT
num
FROM MyNumbers
GROUP BY num
HAVING COUNT(num)=1
UNION ALL
SELECT
NULL AS num
ORDER BY num DESC <-- ORDER BY goes here, after all UNIONs
LIMIT 1
问题是您正在尝试
ORDER BY
和 LIMIT
到 UNION
的第一部分,但语法不允许,所以您可以尝试这个,
SELECT IFNULL(
(SELECT num
FROM MyNumbers
GROUP BY num
HAVING COUNT(num) = 1
ORDER BY num DESC
LIMIT 1),
NULL
) AS num;
这里内部
SELECT
的部分将找到最高的num,它只会出现一次,如果有任何数字,SELECT部分将不返回任何行,IFNULL函数会将其转换为NULL
,希望是这样有帮助,