精华内容
下载资源
问答
  • 编写一个 SQL 查询,查找所有至少连续出现三次的数字。 +----+-----+ | Id | Num | +----+-----+ | 1 | 1 | | 2 | 1 | | 3 | 1 | | 4 | 2 | | 5 | 1 | | 6 | 2 | | 7 | 2 | +----+-----+ 例如,给定上面的 Logs 表...

    题 目 描 述 : \color{blue}题目描述:
    编写一个 SQL 查询,查找所有至少连续出现三次的数字。

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

    例如,给定上面的 Logs 表, 1 是唯一连续出现至少三次的数字。

    +-----------------+
    | ConsecutiveNums |
    +-----------------+
    | 1               |
    +-----------------+
    

    思 路 分 析 : \color{blue}思路分析: 如果是在Java等编程语言中,直接用for循环遍历一遍基本就出来了,但是在MySQL没有遍历表这种流程控制结构。
    但我我们可以分析一下编程语言中的过程,首先我们需要一个pre变量记录前面一个值是多少,以及前面那个值连续出现次数。

    如果pre == 当前值,则当前值到现在连续出现的次数n = n + 1(n为pre连续出现次数)
    否则当前值连续出现次数n = 1,并且将pre更新为当前值。
    

    在MySQL中的表虽然想编程语言中的数组,但是我们也可以做到类似遍历的效果。

    代 码 实 现 : \color{blue}代码实现:

    #对结果进行去重处理
    select distinct Num as ConsecutiveNums
    #将Num以及连续出现的次数作为一个新表
    from (
    	#计算Num,到当前遍历的位置连续出现的次数
      select Num, (
          case 
          #如果Num == 前一个值,个数自增
          when @prev = Num then @count := @count + 1
          #否则计数器count为1,并更新prev为当前Num的值
          when (@prev := Num) is not null then @count := 1
          end
      ) as CNT
      from Logs, (select @prev := null,@count := null) as t
    ) as temp
    #筛选出连续出现次数超过3的
    where temp.CNT >= 3
    

    博 客 推 荐 : \color{blue}博客推荐:
    这道题涉及到子查询、case结构、用户变量等,比较复杂,但是整道题的思路还是比较清晰简洁的,主要是代码实现的时候需要注意一下语法。
    请参考我的专栏
    MySQL从入门到精通之子查询
    MySQL从入门到精通之流程控制结构
    MySQL从入门到精通之变量

    展开全文
  • 方式一 SELECT DISTINCT l1.Num ConsecutiveNums FROM LOGS l1 LEFT JOIN LOGS l2 ON l1.Id = l2.Id - 1 LEFT JOIN LOGS l3 ON l1.Id = l3.Id ...

    方式一

    SELECT DISTINCT
        l1.Num ConsecutiveNums
    FROM
        LOGS l1
        LEFT JOIN LOGS l2 ON l1.Id = l2.Id - 1
        LEFT JOIN LOGS l3 ON l1.Id = l3.Id - 2
    WHERE
        l1.Num = l2.Num AND l2.Num = l3.Num;

     

     

     

    转载于:https://my.oschina.net/u/3424826/blog/1843750

    展开全文
  • 编写一个 SQL 查询,查找所有至少连续出现三次的数字

    连续出现的数字(Consecutive Numbers)

    题目

    ConsecutiveNumbers

    SQL脚本

    • 思路分析
      思路分析

    • MySQL

      
          SELECT DISTINCT
              l1.Num AS ConsecutiveNums
          FROM
              Logs l1,
              Logs l2,
              Logs l3
          WHERE
              l1.Id = l2.Id - 1
              AND l2.Id = l3.Id - 1
              AND l1.Num = l2.Num
      
      
    • Oracle

      
          --利用lag函数向前查询这个id_new前2行记录的值是否于源id列的值相等,如果相等即有三个连续的值,这里我没有指定第三列的M的值默认为null
          SELECT DISTINCT(Num) AS Num 
          FROM 
              (SELECT Num,id,lag(id,2) OVER(partition by num order by id) AS id_new FROM logs) A 
          WHERE A.id = A.id_new + 2
      
      
      

    其他

    Oracle分析函数

    • 概念

      Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计值

    • 聚合函数与分析函数区别

      普通的聚合函数用group by分组,每个分组返回一个统计值,而分析函数采用partition by分组,并且每组每行都可以返回一个统计值。

    • 语法

      分析函数带有一个开窗函数over(),包含三个分析子句:分组(partition by), 排序(order by), 窗口(rows) ,他们的使用形式如下:over(partition by xxx order by yyy rows between zzz)

    常用分析函数

    lag()与lead()

    • 概念
      求之前或之后的第N行。lag和lead函数可以在一次查询中取出同一字段的前n行的数据和后n行的值,该操作可以使用对相同表的表连接来实现,不过使用lag和lead有更高的效率

    • 语法

      lag(arg1,arg2,arg3)

      第一个参数是列名,
      
      第二个参数是偏移的offset,
      
      第三个参数是超出记录窗口时的默认值
      
    • 详解

      lag(列名,n,m): 当前记录前面第n行记录的<列名>的值,没有则默认值为m;如果不带参数n,m,则查找当前记录前面第一行的记录<列名>的值,没有则默认值为null。

    over()开窗函数

    • 概念

      开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化

    • 详解

      开窗函数over()包含三个分析子句:分组子句(partition by), 排序子句(order by), 窗口子句(rows)

    rows窗口子句

    • 常用属性

      unbounded preceding – 第一行

      current row – 当前行

      unbounded following – 最后一行

    • 注意事项

      1. 当开窗函数over()出现分组(partition by)子句时,unbounded preceding即第一行是指表中一个分组里的第一行, unbounded following即最后一行是指表中一个分组里的最后一行

      2. 当开窗函数over()省略了分组(partition by)子句时, unbounded preceding即第一行是指表中的第一行, unbounded following即最后一行是指表中的最后一行

      3. 窗口子句不能单独出现,必须有order by子句时才能出现

    参考链接

    https://blog.csdn.net/gonewithwind818/article/details/95610893
    
    https://blog.csdn.net/myflysun/article/details/70477204
    
    展开全文
  • 编写一个 SQL 查询,查找所有至少连续出现三次的数字。 例如,给定上面的 Logs 表, 1 是唯一连续出现至少三次的数字。 SQL架构: Create table If Not Exists Logs (id int,num int); Truncate table Logs; ...

    编写一个 SQL 查询,查找所有至少连续出现三次的数字。
    在这里插入图片描述
    例如,给定上面的 Logs 表, 1 是唯一连续出现至少三次的数字。
    在这里插入图片描述
    SQL架构:

    Create table If Not Exists Logs (id int,num int);
    Truncate table Logs;
    INSERT INTO logs(id,num) value('1','1');
    INSERT INTO logs(id,num) value('2','1');
    INSERT INTO logs(id,num) value('3','1');
    INSERT INTO logs(id,num) value('4','2');
    INSERT INTO logs(id,num) value('5','1');
    INSERT INTO logs(id,num) value('6','2');
    INSERT INTO logs(id,num) value('7','2');
    INSERT INTO logs(id,num) value('8','1');
    /*以下是自己加的数据*/
    INSERT INTO logs(id,num) value('9','1');
    INSERT INTO logs(id,num) value('10','1');
    INSERT INTO logs(id,num) value('11','1');
    INSERT INTO logs(id,num) value('8','1');
    

    解题思路:这道题就是比较三条数据的num值是否相等,相等的话就输出,一开始考虑到可能要排序,就做了排序,而且有可能前面id可能是不连续的情况,写了好几个方法都不行,实在没法子然后百度了一下,实际上数据是有序的而且连续的,之前的考虑就多余了,立马修改了sql提交,嗯,报错红叉叉,为啥嘞,你想想连续四个连在一起的情况,就是出现重复的数值,题目要求只要出现一次就可以,这就是后面为啥子加多了几条测试数据,加上一个 distinct 去重就可以了。

    select distinct a.num as ConsecutiveNums 
    from (select * from logs order by id asc) as a
    where a.num=(select num from logs where id=a.id+1 order by id) 
    and (select num from logs where id=a.id+1 order by id) =(select num from logs where id=a.id+2 order by id) ;
    
    /*去掉排序*/
    select distinct a.num as ConsecutiveNums 
    from (select * from logs) as a
    where a.num=(select num from logs where id=a.id+1) 
    and (select num from logs where id=a.id+1) =(select num from logs where id=a.id+2) ;
    
    /*百度来的代码*/
    select distinct l1.num ConsecutiveNums from Logs l1
    left join Logs l2 on l1.Id = l2.Id - 1
    left join Logs l3 on l1.Id = l3.Id - 2
    where l1.num = l2.num and l2.num = l3.num;
    
    展开全文
  • CREATE TABLE leetcode.logs ( Id int(11) NOT NULL, Num int(11) ); INSERT INTO leetcode.logs (Id, Num) VALUES (1, 1); INSERT INTO leetcode.logs (Id, Num) VALUES (2, 1); INSERT INTO ...
  • https://leetcode-cn.com/problems/consecutive-numbers/ select distinct t1.Num as ConsecutiveNums from Logs t1,Logs t2,Logs t3 where t1.Id = t2.Id+1 and t2.Id = t3.Id+1 and t1...
  • 180. 连续出现数字 select distinct l1.Num as ConsecutiveNums from Logs l1 join logs l2 on l1.id = l2.id-1 join logs l3 on l1.id = l3.id+1 where l1.Num=l3.Num and l1.Num=l2.Num 步骤解析: 表l1: | ...
  • 编写一个 SQL 查询,查找所有至少连续出现三次的数字。 ±—±----+ | Id | Num | ±—±----+ | 1 | 1 | | 2 | 1 | | 3 | 1 | | 4 | 2 | | 5 | 1 | | 6 | 2 | | 7 | 2 | ±—±----+ 例如,给定上面的 Logs 表, 1 ...
  • LeetCode-缺失数字

    2020-02-21 20:48:56
    n中没有出现在序列中的那个数。 示例 1: 输入: [3,0,1] 输出: 2 示例2: 输入: [9,6,4,2,3,5,7,0,1] 输出: 8 说明: 你的算法应具有线性时间复杂度。你能否仅使用额外常数空间来实现? 来源:力扣(LeetCode) ...
  • 编写一个 SQL 查询,查找所有至少连续出现三次的数字。 例如,给定上面的 Logs 表, 1 是唯一连续出现至少三次的数字。 分析过程 1.查看表的所有内容 select * from logs; 2.创建2个表l1,l2看一下效果 select *...
  • LeetCode 连续整数求和

    千次阅读 2019-05-25 09:40:24
    给定一个正整数 N,试求有多少组连续正整数满足所有数字之和为 N? 示例 1: 输入: 5 输出: 2 解释: 5 = 5 = 2 + 3,共有两组连续整数([5],[2,3])求和后为 5。 示例 2: 输入: 9 输出: 3 解释: 9 = 9 = 4 + 5 = 2 + 3 ...
  • 编写一个 SQL 查询,查找所有至少连续出现三次的数字。 +----+-----+ | Id | Num | +----+-----+ | 1 | 1 | | 2 | 1 | | 3 | 1 | | 4 | 2 | | 5 | 1 | | 6 | 2 | | 7 | 2 | +----+-----+ 例如,给定上面的 Logs...
  • 编写一个 SQL 查询,查找所有至少连续出现三次的数字。 +----+-----+ | Id | Num | +----+-----+ | 1 | 1 | | 2 | 1 | | 3 | 1 | | 4 | 2 | | 5 | 1 | | 6 | 2 | | 7 | 2 | +----+-----+ 例如,给定上面的 Logs 表...
  • 编写一个 SQL 查询,查找所有至少连续出现三次的数字。 ±—±----+ | Id | Num | ±—±----+ | 1 | 1 | | 2 | 1 | | 3 | 1 | | 4 | 2 | | 5 | 1 | | 6 | 2 | | 7 | 2 | ±—±----+ 例如,给定上面的 Logs 表, 1 ...
  •       原题:https://leetcode-cn.com/problems/consecutive-numbers/ ...编写一个 SQL 查询,查找所有至少连续出现三次的数字。 +----+-----+ | Id | Num | +----+-----+ | 1...
  • 我的LeetCode代码仓:https://github.com/617076674/LeetCode 原题链接:https://leetcode-cn.com/problems/consecutive-numbers/description/ 题目描述: 知识点:多表联查 思路:三表联查 由于使用交叉连接...
  • 题目链接:点击打开链接 题目大意:略。 解题思路:略。 AC 代码 WITH t1 AS(SELECT @num := @num + IF(@pre IS NOT NULL AND log_id - @pre != 1, 1, 0) rw, @pre := log_id cur ...GROUP BY
  • 因为最小堆每次都会弹出最小的数字,根据这个数字进一步在堆中删除题目要求的数字。如果删除失败说明不符合题意,如果最终最小堆完全删除则成功。 这里需要注意一下java中优先队列的api。offer()等价于add(),...
  • 表:Logs +-------------+---------+ | Column Name | Type | ...编写一个 SQL 查询,查找所有至少连续出现三次的数字。 返回的结果表中的数据可以按 任意顺序 排列。 查询结果格式如下面的例子所示: L...
  • 编写一个 SQL 查询,查找所有至少连续出现三次的数字。 +----+-----+ | Id | Num | +----+-----+ | 1 | 1 | | 2 | 1 | | 3 | 1 | | 4 | 2 | | 5 | 1 | | 6 | 2 | | 7 | 2 | +----+-----+ 例如,给定上面的 Logs 表...
  • 最近在leetcode上刷题的时候,发现了一个比较有代表性的查询连续出现数字的问题。当然这个连续出现问题可以是很多,连续签到、连续登陆等。这个时候需要用到自连接,自连接也就是把一张表当两张表用。 比如这道题: ...
  • 180. 连续出现数字 题目描述 编写一个 SQL 查询,查找所有至少连续出现三次的数字。 +----+-----+ | Id | Num | +----+-----+ | 1 | 1 | | 2 | 1 | | 3 | 1 | | 4 | 2 | | 5 | 1 | | 6 | 2 | | 7 | 2 | +----+----...
  • 编写一个 SQL 查询,查找所有至少连续出现三次的数字。 +----+-----+ | Id | Num | +----+-----+ | 1 | 1 | | 2 | 1 | | 3 | 1 | | 4 | 2 | | 5 | 1 | | 6 | 2 | | 7 | 2 | +----+-----+ 例如,给定上面的 Logs 表...
  • 给定一个包含非负数的数组和一个目标整数 k,编写一个函数来判断该数组是否含有连续的子数组,其大小至少为 2,总和为 k 的倍数,即总和为 n*k,其中 n 也是一个整数。 示例 1: 输入: [23,2,4,6,7], k = 6 输出: ...
  • leetcode 连续数列

    2020-09-06 21:19:54
    给定一个整数数组,找出总和最大的连续数列,并返回总和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 解题思路: 动态规划 状态转移方程: dp[i]=max...
  • 编写一个 SQL 查询,查找所有至少连续出现三次的数字。 +----+-----+ | Id | Num | +----+-----+ | 1 | 1 | | 2 | 1 | | 3 | 1 | | 4 | 2 | | 5 | 1 | | 6 | 2 | | 7 | 2 | +----+-----+ 例如,给定上面的 Logs 表...
  • 编写一个 SQL 查询,查找所有至少连续出现三次的数字。 +----+-----+ | Id | Num | +----+-----+ | 1 | 1 | | 2 | 1 | | 3 | 1 | | 4 | 2 | | 5 | 1 | | 6 | 2 | | 7 | 2 | +----+-----+ 例如,给定上面的 Logs 表,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 15,348
精华内容 6,139
关键字:

leetcode连续出现的数字