sql训练

来源:力扣(LeetCode)

MyNumbers 表:

±------------±-----+
| Column Name | Type |
±------------±-----+
| num | int |
±------------±-----+
这张表没有主键。可能包含重复数字。
这张表的每一行都含有一个整数。

单一数字 是在 MyNumbers 表中只出现一次的数字。

请你编写一个 SQL 查询来报告最大的 单一数字 。如果不存在 单一数字 ,查询需报告 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 。

题解: 本篇题解的大总结
在这里插入图片描述
!空表示表格没有任何输出,null表示输出为null !
此题的坑在于返回 的null 用聚合函数能巧妙的避开 没有返回值的情况
可以使用聚合函数进行空值null值的转换,具体的聚合函数包括SUM/AVG/MAX/MIN
可以使用select语句进行转换,但空值应直接写在select中而非from中
limit语句无法出现新的null值
where和having同样无法出现新的null值

select 
max(t.num) as num
from 
(
    select num 
    from
    MyNumbers 
    # group by 能自动去重复
    group by 
    num
    having 
    #拼接条件选出没有重复的
    count(num)=1
)
#衍生表需要加别名 这个表名要加
t

此题也可以用ifnull来解决

select ifnull((select num from my_numbers 
group by num
having count(*) = 1
# 此处就是找出最大的值
order by num desc limit 1)
# 如果是null 返回null
, null) num

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Nicholas_giao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值