16,SQL训练之:力扣,619. 只出现一次的最大数字

目录

一,原题力扣链接

二,题干

三,建表语句

四,分析

五,SQL解答

解法一,开窗解答

解法二,常规解答

六,验证

七,知识点总结


一,原题力扣链接

. - 力扣(LeetCode)

二,题干

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 。

三,建表语句

Create table If Not Exists MyNumbers (num int)
Truncate table MyNumbers;
insert into MyNumbers (num) values ('8')
insert into MyNumbers (num) values ('8')
insert into MyNumbers (num) values ('3')
insert into MyNumbers (num) values ('3')
insert into MyNumbers (num) values ('1')
insert into MyNumbers (num) values ('4')
insert into MyNumbers (num) values ('5')
insert into MyNumbers (num) values ('6');

四,分析

  • 数值表
  • 字段 数值
  • 找出数值之 出现了一次 且是最大的数值
  • 条件1 数值之初选了一次 以数字分组 count数字的次数 如果是1次的 就是只出现了一次的
  • 然后max 最大的数字
  • 解法一,开窗函数解答
  • 第一步 ,开窗 count开窗 以num分组 求出不同分组的num出现的次数
  • 第二步,查询上述的表 如果开窗的是=1的时候 max取该列的最大值
  • 解法二,常规解答
  • 第一步,分组 num having聚合条件 当count num次数 是1的时候
  • 第二步  查询这个表 然后max最大这个列

五,SQL解答

解法一,开窗解答

with  t1 as (
    select num ,
       count(num) over(partition by num) ro
from MyNumbers
)
select max(num) as num
from t1 where t1.ro=1;

解法二,常规解答

with t1 as (
    select num as num from MyNumbers group by num having count(num)=1
)
select max(t1.num) as num from t1;

六,验证

常规验证:

开窗验证:

七,知识点总结

  1. 单列 分组该列 聚合 求该列的行数 ;
  2. 分组+聚合 统计行数练习;
  3. 开窗练习 分组+聚合;
  4. 然后根据条件筛选 拿到结果;
  5. count练习;

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值