1 题目描述
MyNumbers 表:
+-------------+------+
| Column Name | Type |
+-------------+------+
| num | int |
+-------------+------+
该表可能包含重复项 (换句话说, 在 SQL 中, 该表没有主键)
这张表的每一行都含有一个整数
单一数字 是在 MyNumbers 表中只出现一次的数字
找出最大的单一数字. 如果不存在单一数字, 则返回 null
2 测试用例
输入:
MyNumbers 表:
+-----+
| num |
+-----+
| 8 |
| 8 |
| 3 |
| 3 |
| 1 |
| 4 |
| 5 |
| 6 |
+-----+
输出:
+-----+
| num |
+-----+
| 6 |
+-----+
解释:
单一数字有 1, 4, 5 和 6
6 是最大的单一数字, 返回 6
示例 2:
输入:
MyNumbers table:
+-----+
| num |
+-----+
| 8 |
| 8 |
| 7 |
| 7 |
| 3 |
| 3 |
| 3 |
+-----+
输出:
+------+
| num |
+------+
| null |
+------+
解释: 输入的表中不存在单一数字, 所以返回 null
3 解题思路
坑点
如果直接使用这种方式, 当没有数据符合要求时, 查询返回结果为空, 但题目要求是 null, 不满足要求
select max(num) as num from MyNumbers group by num having count(*) = 1
查询结果
| num |
| ---- |
| |
对 num 分组统计数量, 查找出数量为 1 的 num , 例如 group by num having count(*) = 1
select max(mn.num) as num
from (select num from MyNumbers group by num having count(*) = 1) as mn;