SQL学习(5):连续出现的数字

SQL学习(5):连续出现的数字

题目来源:力扣题库180.连续出现的数字

1.题目描述

给出logs表(Id, num;Id为主键),查询至少连续出现3次的数字并返回

2.问题分析

1.分析

要点如下:连续出现;返回需要DISTINCT

2.完整代码
SELECT DISTINCT t.nums AS ConsecutiveNums
FROM
	(SELECT nums, 
				LAG(nums,1) OVER(ORDER BY Id) AS last_nums,
				LEAD(nums,1) OVER(ORDER BY Id) AS next_nums
	 FROM logs) AS t
WHERE t.nums=t.last_nums AND t.nums=t.next_nums

3.知识点总结

  • MySQL中子查询需要重命名
  • 连续出现:使用LAG和LEAD函数。可以使用2个LAG、2个LEAD或1个LAD和1个LEAD。
  • 连续出现N次和出现N次:
  1. 连续问题:

    由于存在顺序问题,连续出现N次需要保持原表格的数据顺序,通常使用LAG和LEAD函数,ORDER BY 主键(主键不重复,且一般在MySQL中是顺序的数字)。
    不能使用GROUP BY,会改变表格原顺序。
    条件:LAG/LEAD结果=nums
    【不能够使用 IS NOT NULLT进行判断(见下)】
    3. 非连续问题:可以使用COUNT函数计算

  • NULL和运算:
    与、或、非、异或:(返回1/0表示T/F)
    1. 0 AND NULL返回0;其他实数 AND NULL返回NULL;NULL AND NULL返回NULL
    2. 0NULL OR NULL返回NULL;其他实数 OR NULL返回1;NULL OR NULL返回NULL
    3. NOT NULL返回NULL
      也就是说在判断条件中存在一个NULL,那么,另一个条件成立时AND返回NULL,OR返回True。如果条件查询实际为WHERE NULL时,相当于没有条件查询,返回所有
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值