目录
题目
分析
代码
题目
MyNumbers
表:
+-------------+------+ | Column Name | Type | +-------------+------+ | num | int | +-------------+------+ 该表可能包含重复项(换句话说,在SQL中,该表没有主键)。 这张表的每一行都含有一个整数。
单一数字 是在 MyNumbers
表中只出现一次的数字。
找出最大的 单一数字 。如果不存在 单一数字 ,则返回 null
。
查询结果如下例所示。
示例 1:
输入: 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 。
分析
单一数字 是在 MyNumbers 表中只出现一次的数字。
按照num分组,group by num
通过count确定单一数据,having count(num)=1
找出最大的 单一数字
分两步,先单一数据,后最大
先通过自查询找出所有单一数据,(select num from MyNumbers group by num having count(num)=1)
通过max()函数查找最大的单一数据,select max(num)
设置别名,避免重名,as n
如果不存在 单一数字 ,则返回 null 。
一个很妙的点,当MAX()函数在没有行可供计算时,它将返回NULL。因此,如果MyNumbers表中的所有num值都不是唯一的,这个查询将返回NULL。
代码
select max(num) num
from
(select num
from MyNumbers
group by num
having count(num)=1) n