ORACLE的SQL练习---1.用SQL查询字段中至少连续出现N次的数字

本文介绍如何使用Oracle SQL查询NUM字段中连续出现至少两次的数字。通过两种方法,包括利用row_number() over()函数和rownum,来找出符合条件的记录,并强调了判断连续记录的关键在于行号差值的判断。

1.编写一个 SQL 查询,查找NUM字段中至少连续出现两次的数字。
在这里插入图片描述

例如,给定上面的 lx_01 表,里面的数据都是按照先后顺序插入的,现在需要找到NUM字段连续出现两次及以上的数值 。
实现下图中的效果,1 和2是连续出现至少两次的数字。
在这里插入图片描述

能力点:如何判断连续记录的数据。

--创建练习表
create table LX_01
(
  id  NUMBER,
  num NUMBER
);
 
--插入数据
insert into lx_01 (ID, NUM) values (100001, 1);
commit;
insert into lx_01 (ID, NUM) values (100002, 1);
commit;
insert into lx_01 (ID, NUM) values (100003, 1);
commit;
insert into lx_01 (ID, NUM) values (100004, 2);
commit;
insert into lx_01 (ID, NUM) values (100005, 1);
commit;
insert into lx_01 (ID, NUM) values (100006, 2);
commit;
insert into lx_01 (ID, NUM) values (100007, 2);
commit;
insert into lx_01 (ID, NUM) values (100008, 3);
commit;
insert into lx_01 (ID, NUM) values (100009, 4);
commit;
insert into lx_01 (ID, NUM) values (100010, 3);
commit;

方法一:
用oracle的row_number() over()函数

SELECT num, count(1) c
  from (SELECT id,
               num,
               row_number() over(PARTITION BY num ORDER BY id) r,
               id - row_number() over(PARTITION BY num ORDER BY id) bz
          FROM lx_01) a
 GROUP BY num, bz
having count(1) > 1

方法二:
直接用oracle的rownum
第一步:连续出现的条件就是序号是挨着的,那按照num 和 rownum 两个字段顺序排序

select a.num, rownum as row_num from lx_01 a order by a.num,rownum

在这里插入图片描述

第二步:如何判断是连续的?

  select num,row_num as 原表行号,rownum as 排序后行号,(rownum - row_num) as 行号差
   from (select a.num, rownum as row_num from lx_01 a order by a.num,rownum )

在这里插入图片描述

第三步:连续的记录 行号差是相同的。把这些挑出来

   select num 
   from (select a.num, rownum as row_num from lx_01 a order by a.num,rownum )
 group by num,(rownum - row_num)
 having count(1) >1;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值