欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LeetCode刷题之连续出现的数字

程序员文章站 2022-06-11 14:29:40
...

连续出现的数字(Consecutive Numbers)

题目

LeetCode刷题之连续出现的数字

SQL脚本

  • 思路分析
    LeetCode刷题之连续出现的数字

  • 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
相关标签: LeetCode 数据库