Leetcode Database: #180 Consecutive Numbers
题目
解题思路
使用临时变量 prevVal
保存上一个 Num
值,然后使用临时变量 count
保存当前连续出现相同数字的次数。最外层 SELECT 再把 Num
这一列中 nowCount >= 3 的值取出。
连续数字计数可使用 @count := IF(@prevVal = Num, @count + 1, 1)
条件,prevVal
若为 NULL
,等式不成立 count
初始化为 1;若 prevVal
是正常值则正常比较,现在值等于前值则加 1,否则初始化为 1。
这里如果用 CASE WHEN
则代码会长一些:
1 | CASE |
注意事项
刚开始没理解题目意思是要连续出现的数字,使用这样的查询结果答案是错误的
SELECT Num FROM Logs GROUP BY Num HAVING COUNT(Num) >= 3
找方法判断这些数字是连续
有一个测试案例是:某个数字连续出现 3 次,接着是其他数字,然后又连续出现三次。这时结果中这个数字会出现两次。
加上
DISTINCT Num
,相同数字只取一个
构造测试数据
1 | CREATE TABLE Logs ( |
预期结果:
Num |
---|
1 |
一种答案
1 | -- Runtime: 1422 ms |
其中内层查询得到临时表 tmpTable
的语句为:
1 | SELECT |
内层查询得到的结果为:
Num | nowCount | @prevVal:=Num |
---|---|---|
1 | 1 | 1 |
1 | 2 | 1 |
1 | 3 | 1 |
2 | 1 | 2 |
1 | 1 | 1 |
2 | 1 | 2 |
2 | 2 | 2 |
1 | 1 | 1 |
1 | 2 | 1 |
1 | 3 | 1 |
本博客微信公众号