首页 > 其他分享 >开窗函数的详细的介绍

开窗函数的详细的介绍

时间:2024-04-10 12:29:05浏览次数:13  
标签:函数 mm INTO yyyy date VALUES 开窗 详细 test

开窗函数介绍使用

开窗函数格式

开窗函数格式 :  
    方式一 :
        select ... 
        聚合函数|排序函数 over(partition by 分组字段名 order by 排序字段名 asc|desc)“添加别名处”
        from 表名;
    "默认省略rows between unbounded preceding and current row 从第一行到当前行"
    方式二 :
        select ... 
        聚合函数|排序函数 over(partition by 分组字段名 order by 排序字段名 asc|desc rows|range between 起始位置 and 结束位置)“添加别名处”
         from 表名;

聚合函数

聚合开窗函数 : max : 最大值
                         min : 最小值
                         avg : 平均值
                         sum : 相加总值
                         count(1) | count(*) : 计算行数,包括null值
                         count(列名) : 计算行数,不包含null值

排序开窗函数

 排序开窗函数 : row_number  dense_rank  rank
                          row_number: 巧记: 1234   特点: 唯一且连续
                          dense_rank: 巧记: 1223   特点: 并列且连续
                          rank   : 巧记: 1224   特点: 并列不连续

开窗函数控制范围

 开窗函数控制范围: rows|range between xxx and xxx
                                         - unbounded: 无界限
                                       
 - x preceding:往前x行
                                         - x following:往后x行
                
                                         
- unbounded preceding :表示从前面的起点  第一行
                                         - unbounded following :表示到后面的终点  最后一行   
                   
                                          
- current row:当前行

rows 和 range 的区别

测试数据准备

-- 以下操作是在Oracle中进行
-- 数据准备

-- 创建表
CREATE TABLE test(
  video_id number(10),
  dt date,
  if_follow number(10)
);

-- 插入数据
INSERT INTO test VALUES (2001, to_date('2021-09-24','yyyy-mm-dd'), 1);
INSERT INTO test VALUES (2001, to_date('2021-10-03','yyyy-mm-dd'), 9);
INSERT INTO test VALUES (2001, to_date('2021-10-02','yyyy-mm-dd'), 2);
INSERT INTO test VALUES (2001, to_date('2021-10-01','yyyy-mm-dd'), 6);
INSERT INTO test VALUES (2002, to_date('2021-09-25','yyyy-mm-dd'), 1);
INSERT INTO test VALUES (2002, to_date('2021-09-25','yyyy-mm-dd'), 1);
INSERT INTO test VALUES (2002, to_date('2021-09-26','yyyy-mm-dd'), 6);
INSERT INTO test VALUES (2002, to_date('2021-09-27','yyyy-mm-dd'), 1);
INSERT INTO test VALUES (2002, to_date('2021-09-28','yyyy-mm-dd'), 1);
INSERT INTO test VALUES (2002, to_date('2021-09-29','yyyy-mm-dd'), 8);
INSERT INTO test VALUES (2002, to_date('2021-09-30','yyyy-mm-dd'), 7);
INSERT INTO test VALUES (2002, to_date('2021-10-01','yyyy-mm-dd'), 1);
INSERT INTO test VALUES (2002, to_date('2021-10-02','yyyy-mm-dd'), 9);
INSERT INTO test VALUES (2002, to_date('2021-10-03','yyyy-mm-dd'), 1);

-- 提交数据
commit;
rows 是取范围行的值
select
    video_id,
    dt,
    sum(if_follow) over (partition by video_id order by if_follow rows between unbounded preceding and current row )row_num
from test
where video_id=2002;

range 是取范围值的值 
select
    video_id,
    dt,
    sum(if_follow) over (partition by video_id order by if_follow range between unbounded preceding and current row)row_num
from test
where video_id = 2002;

进阶开窗函数

其他开窗函数:

                        ntile(x)功能: 将分组排序之后的数据分成指定的x个部分(x个桶)   
     
 "注意ntile规则:尽量平均分配 ,优先满足最小(编号1)的桶,彼此最多不相差1个"

                        -lag: 用于统计窗口内往上第n行值
                        -lead: 用于统计窗口内往下第n行值

                        -first_value: 取分组内排序后,截止到当前行,第一个值
                        -last_value : 取分组内排序后,截止到当前行,最后一个值

以上就是小浪本次发布的内容,如果对友友您有帮助,还麻烦您给小浪点个关注 和 赞,这是对小浪莫大的支持,蟹蟹友友们,小浪还会持续更新,分享自己在学习整个过程中遇到的问题!  

标签:函数,mm,INTO,yyyy,date,VALUES,开窗,详细,test
From: https://blog.csdn.net/Mr_xiaolang/article/details/137591172

相关文章

  • WebClient类 详细使用教程
    原文链接:https://blog.csdn.net/nutian/article/details/2913670   https://blog.csdn.net/m0_58015531/article/details/131322801WebClient类如果只想从特定的URI请求文件,则可以使用的最简单.NET基类就是System.Net.WebClient。这个类是非常高层的类,它主要用于执行带有一......
  • intellij idea的快速配置详细使用
    IntelliJIDEA是一款功能强大的集成开发环境(IDE),可以用于开发各种类型的应用程序,如Java、Kotlin、JavaScript、Python等。它提供了许多快速配置选项,可以帮助开发人员更高效地开发代码。在这份文档中,我们将详细介绍IntelliJIDEA的快速配置使用方法,让您快速上手使用它。下载......
  • 【ZZULIOJ】1053: 正弦函数(Java)
    目录题目描述输入输出样例输入 Copy样例输出 Copycode题目描述输入x,计算上面公式的前10项和。输入输入一个实数x。输出输出一个实数,即数列的前10项和,结果保留3位小数。样例输入 Copy1样例输出 Copy0.841codeimportjava.util.*;publicclassMain......
  • 查询题目,日期函数
    老王是荆职百获食堂的采购员,每天买白菜50斤,土豆30斤,茄子30斤,豆角50斤,采购完都会记录到下面的Vegetable表中,请你用学到的Oracle知识帮帮老王算算帐。编号白菜单价土豆单价茄子单价豆角单价日期0010.350.50.51.22017/11/100020.4......
  • MYSQL五个常见的聚合函数
    学生表DDLCREATETABLE`student`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'学号',`createDate`datetimeDEFAULTNULL,`userName`varchar(20)DEFAULTNULL,`pwd`varchar(36)DEFAULTNULL,`phone`varchar(11)DEFAULTNULL,`age`tinyi......
  • js代码的函数及应用
    昨天学习了单击事件及其应用,现在我们接触js的函数。什么是函数?函数是可以重复执行的代码,需要通过函数名称来执行代码。 自定义一个函数function功能名称(){代码}例题:   圆的面积   varr=5;varpi=3.14functionc......
  • C语言分支语句和循环语句(非常详细的分支循环讲解)
    目录选择语句if-else语句if嵌套switch语句逻辑操作符!逻辑非&&逻辑与||  逻辑或循环语句while循环do-while循环for循环break和continue语句 break语句continue语句选择语句if-else语句if语句的语法形式if(表达式){语句}在C语言中非0为真,0为假......
  • Django便捷函数shortcuts
    一、Django便捷函数1、介绍包django.shortcuts收集助手函数和“跨”多级mvc的类,换句话说,为了方便起见,这些函数/类引入受控耦合。fromdjango.shortcutsimportrender,HttpResponse,redirect,reverse,resolve_url2、官方链接https://docs.djangoproject.com/zh-hans/3......
  • C语言08-函数(递归、字符串、日期时间、数学计算函数),指针
    第11章函数11.7递归函数​ ——相当于俄罗斯套娃;一个程序未执行结束会挂起,相当于堆栈一个函数在函数体内又调用了本身,我们称为递归调用,这样的函数就是递归函数。递归函数成功执行需满足以下两个条件:(1)必须有一个明显的结束条件。(2)必须有一个趋近于结束条件的趋势......
  • js 常用数组函数 join() 拼接, push()尾部添加、pop()移除最后一项、shift()删除第一项
    js常用数组函数join()拼接,push()尾部添加、pop()移除最后一项、shift()删除第一项、unshift()头部添加、sort()小到大顺序排列、slice()截取获取新数组、splice()分隔截取数组、concat()连接、reverse()反转文章目录1.join()函数2.push()函数3.pop()函数4.sh......