MyNumbers 表:
+-------------+------+
| Column Name | Type |
+-------------+------+
| num | int |
+-------------+------+
这张表没有主键。可能包含重复数字。这张表的每一行都含有一个整数。
单一数字 是在 MyNumbers 表中只出现一次的数字。
请你编写一个 SQL 查询来报告最大的 单一 数字 。如果不存在 单一数字 ,查询需报告null 。
查询结果如下例所示。
示例 1:
输入:
MyNumbers 表:88331456
输出:
+-----+
| num |
+-----+
| 6 |
+-----+
解释:单一数字有 1、4、5 和 6 。
6 是最大的单一数字,返回 6 。
示例 2:
输入:
MyNumbers table:8877333
输出:
+------+
| num |
+------+
| null |
+------+
解释:输入的表中不存在单一数字,所以返回 null 。
我敏捷的头脑快速旋转,大概有了个思路:
1.根据num分组
2.计算分组内记录数量等于1
3.从高到低排序
4.取第一条记录
然后快速写了一版错误答案,如下所示:
sql
select * from mynumbers
group by num
having count(num)=1
order by num desc
limit 1
炸裂。。。。当不存在单一数字,我的输出为空,而不是null。
后来百度才知道,只有select和某些函数,输出为空的时候才会输出null。而limit正好就是不输出为null,直接输出为空的那个函数。
于是我想到了一种解法:
sql
select(
select num from mynumbers
group by num
having count(num)=1
order by num desc
limit 1
) as num
然后看了别人的解题思路。
感谢力扣大神【退堂鼓一级表演艺术家】总结的表格:
这是另外一种写法:
sql
select max(num) num from
(
select num from mynumbers
group by num
having count(num)=1
) as t