LeetCode_OJ【180】Consecutive Numbers
来源:互联网 发布:淘宝活动招商入口在哪 编辑:程序博客网 时间:2024/06/01 08:38
Write a SQL query to find all numbers that appear at least three times consecutively.
+----+-----+| Id | Num |+----+-----+| 1 | 1 || 2 | 1 || 3 | 1 || 4 | 2 || 5 | 1 || 6 | 2 || 7 | 2 |+----+-----+
For example, given the above Logs
table, 1
is the only number that appears consecutively for at least three times.
在刚开始做这道题目的时候完全没有接触过sql中的变量,也就能写出下面这种sql语句
select distinct num from Logs l1 where EXISTS (select id from Logs l3 where l3.id = l1.id +2 and l1.num = l3.num) and EXISTS (select id from Logs l2 where l2.id = l1.id +1 and l1.num = l2.num);
这种方法在数据量比较小的时候也能得出满意的结果,但是数据量一多直接超时,毕竟对于每条记录都进行多表连接操作太费时费力了。
然后在网上搜了下找到了下面这个方法:
http://www.2cto.com/database/201505/396743.html
方法一:
增加一列rank,初始值为1,从上往下扫描Logs表的时候,碰到num值相同的元组,设置同样的rank值,否则rank值+1;
代码如下:
select num,@curRank := @curRank+IF(@preNum = num,0,1) as rank ,@preNum:=num from logs s,(select @curRank := 0) r,(select @preNum := null) p;
+
------+------+--------------+
| num | rank | @preNum:=num |
+
------+------+--------------+
| 1 | 1 | 1 |
| 1 | 1 | 1 |
| 1 | 1 | 1 |
| 2 | 2 | 2 |
| 1 | 3 | 1 |
| 2 | 4 | 2 |
| 2 | 4 | 2 |
+
------+------+--------------+
select num from(select num,@curRank := @curRank+IF(@preNum = num,0,1) as rank ,@preNum:=num from Logs s,(select @curRank := 0) r,(select @preNum := null) p) lgroup by rank having count(rank) >= 3;
方法二:
增加count列,碰到相同num则count+1否则count=1,最后返回count>=3的num值。
select distinct num from (select num,@count:=if(@preNum = num,@count+1,1) as count,@preNum:=num from Logs,(select @count:=1) c,(select @preNum:= null) p) lwhere count>=3;
最后吐槽下leetcode,做DB的题目经常第一次提交超时,第二次就通过,查看详情性能还超过了一大半的人,有点无语。。。
0 0
- LeetCode_OJ【180】Consecutive Numbers
- consecutive numbers 180
- Consecutive Numbers
- Consecutive Numbers
- Consecutive Numbers
- Consecutive Numbers
- LeetCode | Consecutive Numbers
- [leetcode] Consecutive Numbers
- LeetCode:Consecutive Numbers
- Leetcode:Consecutive Numbers
- [LeetCode] Consecutive Numbers - SQL
- Leetcode: Consecutive Numbers
- [LeetCode][Database]Consecutive Numbers
- LeetCode OJ Consecutive Numbers
- [Leetcode] [Database] Consecutive Numbers
- leetcode 180. Consecutive Numbers
- 【Leetcode】Consecutive Numbers
- leetcode-Consecutive numbers
- Redis 客户端Jedis使用(一)
- 欢迎界面仅首次打开时出现,即数据持久化的应用
- MongoDB—细说高级操作
- Linux性能分析和工具)
- PHP下载封装
- LeetCode_OJ【180】Consecutive Numbers
- 手机界面设计中12种常用布局
- uva 473 dp
- Meteor——以NodeJS为基础环境,MongoDB为数据环境的全栈开发平台!
- 简析股权转让涉税问题
- MongoDB—索引操作
- ATI 驱动教程
- freemark 笔记
- Always On Top Maker 窗口置顶软件(推荐)