【LeetCode】180.连续出现的数字 学习笔记


180.连续出现的数字

编写一个SQL查询,查找至少连续出现三次的所有数字。


用到的表和数据SQL:

[sql]  view plain  copy
  1. Create table If Not Exists Logs (Id int,Num int);  
  2. Truncate table Logs;  
  3. insert into Logs (Id, Num) values ('1','1');  
  4. insert into Logs (Id, Num) values ('2','1');  
  5. insert into Logs (Id, Num) values ('3''1');  
  6. insert into Logs (Id, Num) values ('4','2');  
  7. insert into Logs (Id, Num) values ('5','1');  
  8. insert into Logs (Id, Num) values ('6','2');  
  9. insert into Logs (Id, Num) values ('7','2');  

答案:

这道题给了我们一个Logs表,让我们找Num列中连续出现相同数字三次的数字,那么由于需要找三次相同数字,所以我们需要建立三个表的实例,我们可以用l1分别和l2, l3内交,l1和l2的Id下一个位置比,l1和l3的下两个位置比,然后将Num都相同的数字返回即可:

[sql]  view plain  copy
  1. select distinct l1.Num ConsecutiveNums from Logs l1  
  2. left join Logs l2 on l1.Id = l2.Id - 1  
  3. left join Logs l3 on l1.Id = l3.Id - 2  
  4. where l1.Num = l2.Num and l2.Num = l3.Num;  

可以理解为,通过建立三个表,进行错位对比, l1 的 id1 的 num ,和 l2 的 id2的 num ,和l3 的 id3 的num 比,如果都相等,则就表明前三个连续的数字是相等的。 画了个示意图。

猜你喜欢

转载自blog.csdn.net/aanndd77/article/details/80770014