题目描述:
Write a SQL query to find all numbers that appear at least three times consecutively.
For example, given the above Logs table, 1 is the only number that appears consecutively for at least three times.
题目大意:
编写一个SQL查询找出所有至少连续出现3次的数字。
例如,给定上面的Logs表,1是唯一至少连续出现3次的数字。
解题思路:
可以从题目Rank Scores(http://oj.leetcode.com/problems/rank-scores/)中获得启示
配合使用MySQL用户定义变量和聚组函数统计连续出现的数字个数
SQL语句:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
对’@curRank := @curRank + IF(@prevNum = Num, 0, 1) AS rank, @prevNum := Num‘ 的说明,@prevNum = Num, 0, 1 是否prevNum 是否与Num相等,如果相等二者则为0,否则另prevNum为1.
补充说明:
以题目描述的Logs表为例,上面的SQL语句中,最内层的SELECT语句执行结果如下:
执行结果中的rank列将Num转化为从1开始递增的序号,但序号只在Num出现变化时增加,(连续出现的相同数字序号也相同)
第二层SELECT语句对rank进行计数,并只保留计数不小于3的条目,执行结果为:
最外层SELECT语句对Num进行去重。
本博客介绍了一个SQL查询方法,用于找出Logs表中连续出现三次及以上的数字。通过利用MySQL用户定义变量和聚合函数,实现了对连续数字的统计和筛选。
803

被折叠的 条评论
为什么被折叠?



