ToB企服应用市场:ToB评测及商务社交产业平台

标题: 查询连续出现的数字次数为3的num [打印本页]

作者: 王國慶    时间: 2022-8-11 21:09
标题: 查询连续出现的数字次数为3的num
#连续出现的数字次数3
Mysql
#变量使用方式 @pre     :=赋值
select distinct num  from
(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
#解析:
id  num
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
id  num   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) 表示有符号的数字

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4