LeetCode--619. 只出现一次的最大数字

73 阅读1分钟

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;