博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] Consecutive Numbers 连续的数字 --数据库知识(mysql)
阅读量:6092 次
发布时间:2019-06-20

本文共 1158 字,大约阅读时间需要 3 分钟。

1. 题目名称   Consecutive Numbers

2 .题目地址

3. 题目内容 写一个SQL,查处表Logs中连续出现至少3次的数字:(考察的知识点主要是多个表之间的连接)

----+-----+| Id | Num |+----+-----+| 1  |  1  || 2  |  1  || 3  |  1  || 4  |  2  || 5  |  1  || 6  |  2  || 7  |  2  |+----+-----+

比如上表中,写出的结果是1.

4. 解题思路

解法一:直接使用一套SELECT - FROM -WHERE语句:

SELECT DISTINCT L1.Num FROM Logs L1, Logs L2, Logs L3WHERE (L1.Id = L2.Id + 1 AND L1.Num = L2.Num) AND      (L1.Id = L3.Id + 2 AND L1.Num = L3.Num);

理论上正确,但是在leetcode上运行结果不通过,还未知什么原因。看过discuss的讨论后,加入返回的列的名字ConsecutiveNums后AC,但是郁闷的是题目没有给出要返回的列的名字。

解法二:可以使用JOIN句子完成相同的功能

SELECT DISTINCT L1.Num FROM Logs L1JOIN Logs L2 ON L1.Id + 1 = L2.IdJOIN Logs L3 ON L1.Id + 2 = L3.IdWHERE L1.Num = L2.Num AND L1.Num = L3.NumORDER BY L1.Num

运行结果不通过。在加入 返回的列名ConsecutiveNums 后,运行通过,不过效率没有第一种方法高。

解法三:上面两种方法可以用于找到至少三次连续出现的数字,如果将连续出现的数字扩展到N个,按照上面思路写出的SQL语句就会比较长。因此可以用下面这种方式来查询:

SELECT DISTINCT NumFROM (  SELECT Num,     CASE       WHEN @prev = Num THEN @count := @count + 1      WHEN (@prev := Num) IS NOT NULL THEN @count := 1    END CNT  FROM Logs, (SELECT @prev := NULL) X  ORDER BY Id) AS AWHERE A.CNT >= 3

将最后一行的3改为N,即可用于查询至少N次连续出现的数字。

转载于:https://www.cnblogs.com/simplepaul/p/6151281.html

你可能感兴趣的文章
ripgrep 11 正式发布,Rust 开发的基于行的搜索工具
查看>>
GuiLite 2.1 发布:也支持非触控操作,而代码不加增
查看>>
惠普集团放弃Salesforce 采用微软的云端CRM
查看>>
【Java】File类
查看>>
都是default惹的祸-yarn调度(一)-fair调度器drf调度策略作业不执行问题的调查和源码分析...
查看>>
SpaceX成功发射已使用过的“龙”飞船,未来或可执行重复载人任务
查看>>
PHPOK 5.2.009 发布
查看>>
MATE Desktop 1.22 发布,复活 GNOME 2
查看>>
ColorWanted 2.7.4 发布, Windows 下好用的屏幕取色器
查看>>
Botvac清洁机器人:智能操控 精致吸尘
查看>>
Nature机器学习子刊被指开历史倒车,Jeff Dean等数百名学者联名抵制
查看>>
提升人工智能效率 量子计算比经典算法节省时间
查看>>
比起VR高端设备市场,三星或对移动VR平台更感兴趣
查看>>
无需编程操作和视觉系统,这款机器人就可灵活若蛇
查看>>
为什么量子力学和相对论有矛盾?超弦理论或将统一物理学
查看>>
wireshark解析自定义的protobuf协议
查看>>
如何处理CloudFoundry应用部署时遇到的254错误
查看>>
Lua模块的加载与内存释放
查看>>
受企业级客户和云服务提供商推动, Veeam第一季度业绩又获增长
查看>>
区块链应用 | 2018年区块链将步入实际应用阶段,区块链经济将重构商业逻辑
查看>>