王國慶 发表于 2022-8-11 21:09:58

查询连续出现的数字次数为3的num

#连续出现的数字次数3
Mysql
#变量使用方式 @pre   :=赋值
select distinct numfrom
(select Num,
    case
      when @prev = Num then @count := @count + 1
      when (@prev := Num) is not null then @count := 1
    end as CNT
from Logs,(select @prev:=0,@count:=1 ) temp) temp1 where cnt>=3
#解析:
idnum
1        1
2        1
3        1
4        2
5        1
6        2
7        2
## 数据库查询方式一次查询多条,case when 中从第一条开始判断,直到结束
1.case when 中的顺序问题: 满足第一个条件时直接退出 否则继续查询是否满足第二条件
2.当查询时,先执行第一个when ,@prev=num 表示@prev 是否等于num ,等于时 计数加+1
3.第二个when,当前面满足@prev 不等于num ,则将num 赋值给@prev 且不为空,表示 如果num为空 跳过 , 那么计数@count 赋值1 重新计数
4.(select @prev:=0,@count:=1 ) temp 通过子查询初始化变量
解法二:
SELECT
        num
FROM
        (
        SELECT
                num,
                ( cast( DENSE_RANK() over ( PARTITION BY num ORDER BY id ASC ) AS signed ) - id ) AS rn
        FROM
        LOGS
        ) t1
GROUP BY
        rn,
        num
HAVING
        count( rn )>= 3
       
#解析:
1.dense_rank根据num 分组 order by id得到rn
idnum   rn
1        1          1
2        1          2
3        1          3
5        1          4
4        2          1
6        2          2
7        2          3
连续时,id-rn 的得到的值一样
最后分组 id-rn 使用 having count >=3得到num
# mysql默认数字相减为负数报错使用 cast(字段 as signed) 表示有符号的数字

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 查询连续出现的数字次数为3的num