sql开窗函数

news2024/11/14 17:35:42

用的Oracle数据库进行测试

一、数据准备

DROP TABLE T_TEST;
CREATE TABLE T_TEST (
  id NUMBER(10) VISIBLE NOT NULL ,
  姓名 VARCHAR2(50 BYTE) VISIBLE ,
  性别 VARCHAR2(50 BYTE) VISIBLE ,
  班级 VARCHAR2(50 BYTE) VISIBLE ,
  成绩 NUMBER(5,2) VISIBLE 
);

INSERT INTO T_TEST VALUES ('1', '张三', '男', '1班', '100');
INSERT INTO T_TEST VALUES ('2', '李四', '男', '1班', '89');
INSERT INTO T_TEST VALUES ('3', '王五', '男', '1班', '70');
INSERT INTO T_TEST VALUES ('4', '浩宇', '男', '2班', '99');
INSERT INTO T_TEST VALUES ('5', '祥康', '男', '2班', '66');
INSERT INTO T_TEST VALUES ('6', '刘丽', '女', '2班', '88');
INSERT INTO T_TEST VALUES ('7', '张三', '男', '3班', '59');
INSERT INTO T_TEST VALUES ('8', '张三', '男', '4班', '78');

二、开窗函数是什么?

开窗函数是对一组值进行操作,不需要使用GROUP BY子句对数据进行分组,能够在同一行中同时返回基础行的列和聚合列。

三、开窗函数的语法

OVER( PARTITION BY 列名1 ORDER BY 列名2 )

括号中的两个关键词PARTITION BYORDER BY 可以只出现一个

四、开窗函数的类型?

聚合开窗

SUM(expr)

返回分组中的和

AVG(expr)

返回分组中的平均值

MIN(expr)

返回分组中的最小值

MAX(expr)

返回分组中的最大值

COUNT(expr)

返回分组中的行数

排序开窗

ROW_NUMBER()

分组排序,然后进行编号:1,2,3,4,5

RANK()

分组排序,然后进行编号,对相同值处理,跳号:1,1,3,4,5

DENSE_RANK()

分组排序,然后进行编号,对相同值处理,不跳号:1,1,2,3,4

偏移开窗

LAG(expr,n)

返回当前行的前n行的expr的值

LEAD(expr,n)

返回当前行的后n行的expr的值

FIRST_VALUE(expr)

返回第一个expr的值

LAST_VALUE(expr)

返回最后一个expr的值

五、开窗函数的演示

1、聚合开窗

① :SUM(expr)

语法:SUM(成绩) OVER( PARTITION BY 姓名 ORDER BY 班级 ASC )

描述:根据【姓名】分组,【班级】排序,然后对每个分组后的【成绩】进行求和操作。

SELECT 姓名,性别,班级,成绩, SUM(成绩) OVER(PARTITION BY 姓名 ORDER BY 班级 ASC) SUM_OVER FROM T_TEST

②:AVG(expr)

语法:AVG(成绩) OVER( PARTITION BY 姓名 ORDER BY 班级 ASC )

描述:根据【姓名】分组,【班级】排序,然后对每个分组后的【成绩】进行求平均值操作。

SELECT 姓名,性别,班级,成绩, AVG(成绩) OVER(PARTITION BY 姓名 ORDER BY 班级 ASC) AVG_OVER FROM T_TEST

③:MIN(expr)

语法:MIN(成绩) OVER( PARTITION BY 姓名 ORDER BY 班级 ASC )

描述:根据【姓名】分组,【班级】排序,然后对每个分组后的【成绩】进行求最小值的操作。

SELECT 姓名,性别,班级,成绩, MIN(成绩) OVER(PARTITION BY 姓名 ORDER BY 班级 ASC) MIN_OVER FROM T_TEST

④:MAX(expr)

语法:MAX(成绩) OVER( PARTITION BY 姓名 ORDER BY 班级 ASC )

描述:根据【姓名】分组,【班级】排序,然后对每个分组后的【成绩】进行求最最大值的操作。

SELECT 姓名,性别,班级,成绩, MAX(成绩) OVER(PARTITION BY 姓名 ORDER BY 班级 DESC) MAX_OVER FROM T_TEST

⑤:COUNT

语法:COUNT(成绩) OVER( PARTITION BY 姓名 ORDER BY 班级 ASC )

描述:根据【姓名】分组,【班级】排序,然后对每个分组后的【成绩】进行行数求和的操作。

SELECT 姓名,性别,班级,成绩, COUNT(成绩) OVER(PARTITION BY 姓名 ORDER BY 班级 DESC) COUNT_OVER FROM T_TEST

2、排序开窗

①:ROW_NUMBER()

语法:ROW_NUMBER() OVER(PARTITION BY 姓名 ORDER BY 成绩 DESC)

描述:根据【姓名】分组,【成绩】排序,然后进行数据行编号【1,2,3,4,5】。

SELECT 姓名,性别,班级,成绩, ROW_NUMBER() OVER(PARTITION BY 姓名 ORDER BY 成绩 DESC) ROW_NUMBER_OVER FROM T_TEST

②:RANK

语法:RANK() OVER(PARTITION BY 姓名 ORDER BY 成绩 DESC)

描述:根据【姓名】分组,【成绩】排序,然后进行数据行编号,遇到相同值,编号一样,下一个跳号【1,2,3,3,5】。

INSERT INTO T_TEST VALUES ('9', '金华', '男', '1班', '70');
INSERT INTO T_TEST VALUES ('10', '金华', '男', '1班', '60');

SELECT 姓名,性别,班级,成绩, RANK() OVER(PARTITION BY 班级 ORDER BY 成绩 DESC) RANK_OVER FROM T_TEST

③:DENSE_RANK

语法:DENSE_RANK() OVER(PARTITION BY 姓名 ORDER BY 成绩 DESC)

描述:根据【姓名】分组,【成绩】排序,然后进行数据行编号,遇到相同值,编号一样,下一个不跳号【1,2,3,3,4】。

SELECT 姓名,性别,班级,成绩, DENSE_RANK() OVER(PARTITION BY 班级 ORDER BY 成绩 DESC) DENSE_RANK_OVER FROM T_TEST

3、偏移开窗

①:LAG(expr,n)

语法:LAG(成绩,1) OVER(PARTITION BY 班级 ORDER BY 成绩 DESC)

描述:根据【班级】分组,【成绩】排序,然后返回当前行的前1行的成绩的值进行数据

SELECT 姓名,性别,班级,成绩, LAG(成绩,1) OVER(PARTITION BY 班级 ORDER BY 成绩 DESC) LAG_OVER FROM T_TEST

②:LEAD(expr,n)

语法:LEAD(成绩,1) OVER(PARTITION BY 班级 ORDER BY 成绩 DESC)

描述:根据【班级】分组,【成绩】排序,然后返回当前行的后1行的成绩的值

SELECT 姓名,性别,班级,成绩, LEAD(成绩,1) OVER(PARTITION BY 班级 ORDER BY 成绩 DESC) LEAD_OVER FROM T_TEST

③:FIRST_VALUE(expr)

语法:FIRST_VALUE(成绩) OVER(PARTITION BY 班级 ORDER BY 成绩 DESC)

描述:根据【班级】分组,【成绩】排序,然后返回当前组的第一个成绩的值

SELECT 姓名,性别,班级,成绩, FIRST_VALUE(成绩) OVER(PARTITION BY 班级 ORDER BY 成绩 DESC) FIRST_VALUE_OVER FROM T_TEST

④:LAST_VALUE

语法:LAST_VALUE(成绩) OVER(PARTITION BY 班级 ORDER BY 成绩 DESC)

描述:根据【班级】分组,【成绩】排序,然后返回当前组的最后一个成绩的值

SELECT 姓名,性别,班级,成绩, LAST_VALUE(成绩) OVER(PARTITION BY 班级 ORDER BY 成绩 DESC) LAST_VALUE_OVER FROM T_TEST

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/392987.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【蓝桥杯专题】 递归 递推 (C++ | 洛谷 | acwing)

文章目录【蓝桥杯专题】 递归 &递推 (C | 洛谷 | acwing)复习P5534 【XR-3】等差数列P4994 终于结束的起点P1028 [NOIP2001 普及组] 数的计算波动数列[递归]母牛的故事蓝桥杯:耐摔指数菜狗现在才开始备战蓝桥杯QAQ 【蓝桥杯专题】 递归 &…

8 神经网络及Python实现

1 人工神经网络的历史 1.1 生物模型 1943年,心理学家W.S.McCulloch和数理逻辑学家W.Pitts基于神经元的生理特征,建立了单个神经元的数学模型(MP模型)。 1.2 数学模型 ykφ(∑i1mωkixibk)φ(WkTXb)y_{k}\varphi\left(\sum_{i1…

基于龙芯+国产FPGA 的VPX以太网交换板设计(三)

调试与测试是本系统设计实现的重要环节。单板调试主要包括各单元电路和接口 的调试,主要通过查看信号波形和运行软件对每个功能进行测试。本章将设计一系列 的调试和测试方案来验证电路设计的正确性。 6.1 电路板静态检查 经过原理图设计、印制板设计、制造、印制板…

HTML5智慧渔业WebGL可视化云平台

中国作为全球第一大水产养殖大国,未来中国水产养殖的出路在哪里?智慧渔业到底能起到多大的作用?在未来它能为我国水产养殖做出什么深刻的变化吗?今天给大家分享一个基于 数维图 的 Sovit3D可视化编辑器 构建的水产养殖3D可视化场景案例——智慧渔业可视化管理系统…

Hadoop框架:MapReduce基本原理和入门案例

Hadoop MapReduce是一种用于处理大数据的编程模型。它将数据集切分成多个小任务,每一个小任务都可以通过独立的计算来完成,最终的结果可以通过合并或更新数据来进行聚合。Hadoop MapReduce极大地简化了处理大数据的过程,因为它可以同时进行多…

锁屏面试题百日百刷-Hive篇(十一)

锁屏面试题百日百刷,每个工作日坚持更新面试题。锁屏面试题app、小程序现已上线,官网地址:https://www.demosoftware.cn。已收录了每日更新的面试题的所有内容,还包含特色的解锁屏幕复习面试题、每日编程题目邮件推送等功能。让你…

大坝安全监测和水雨情测报系统-智慧水利

政策背景2021年3月23日《国务院办公厅关于切实加强水库除险加固和运行管护工作的通知》(国办发〔2021〕8号)和2021年9月22日国务院常务会议均明确要求,加快推进水库除险加固,加强雨水情和安全监测预警设施建设,健全常态…

23种Java设计模式

目录 🧡 Java 设计模式 六大原则 创建型模式 工厂模式 (Factory Pattern) 抽象工厂模式 (Abstract Factory Pattern) 单例模式 (Singleton Pattern) 建造者模式 (BuilderPattern) 原型模式 (Prototype Pattern) 结构型模式 适配器模式 (Adapter Pattern) …

vmware 虚拟机创建 LVM

LVM 原理 LVM (Logical volume Manager): 虚拟设备驱动,是在内核中块设备和物理设备之间添加的一个新的抽象层次, LVM 可以弹性的调整 文件系统的容量 LVM的实现原理:LVM 将几个实体的 partitions/disk 通过软件组合成一块独立的大磁盘VG,之…

中职网络空间安全B-windows渗透

Windows渗透 目录 Windows渗透 要点 cev2017-7269 ms14-064 pr.exe 提权 3389.bat 打开连接 破解hash 总体是众多小点的结合 1.通过本地pc中的渗透平台kali对服务器场景进行服务及版本扫描渗透测试,并将该操作显示结果中445端口对应的服务版本信息字符串作为fla…

Django实践-03模型-02基于admin管理表

文章目录Django实践-03模型利用Django后台管理模型1. 将admin应用所需的表迁移到数据库中。2. 创建访问admin应用的超级用户账号,3. 运行项目4.注册模型类5.对模型进行CRUD操作。6.实现学科页和老师页效果1. 修改polls/views.py文件。2.修改templates/polls/subject…

THUPC-2023 游记

清华校赛,战火重燃 原文链接 宣传图 上周四同学在洛谷无意间看到了宣传图,当时很有感触。不知觉间,又是一年春,又是一场触动心弦的 THUPC 了。 周五的团建过于有趣,致使我完全将 THUPC 抛之脑后了。 周日上午被省选…

原型链(回顾)

概念prototype__proto__原型链查找机制万物皆对象判断私有/共有属性方法Object.prototype.prototype nullObject.create(proto, [propertiesObject])给类的原型上扩展属性方法的4种方法Fn.prototype.xxx xxxObject.prototype.xxx xxxf1.proto.xxx xxx原型重定向 概念 原型…

虚拟相机 Cinemachine Virtual Camera

一.简介 本质上,虚拟相机应该是相机行为的配置文件,虚拟相机之间的切换实际上就是在进行相机行为之间的切换; 虚拟相机并不会创建任何摄像机,他只会创建虚拟节点,实际上操作的是Cinemachine Brain 虚拟相机属性设置完毕后,应尽量避免在游戏中对齐进行修改, 如有需要可以多创建…

RocketMQ-03

1. 高级功能 1.1 消息存储 分布式队列因为有高可靠性的要求,所以数据要进行持久化存储。 消息生成者发送消息MQ收到消息,将消息进行持久化,在存储中新增一条记录返回ACK给生产者MQ push 消息给对应的消费者,然后等待消费者返回A…

Ubuntu 搭建文件服务器(Nginx)

1,下载Nginx 2,安装Nginx 3,Nginx指令及脚本使用 4,配置Nginx 1,下载Nginx ①去官网下载对应的Nginx版本 nginx: download ②直接在ubuntu使用指令下载 wget http://nginx.org/download/nginx-1.23.3.tar.gz 2…

网上赚钱的兼职有哪些,互联网兼职什么挣钱多?

2023年,大投资的创业并不适合普通人,而小投资的创业形式,轻资产创业也需要资金,所以,很多人考虑到了兼职赚钱,那么,网上赚钱的兼职有哪些,互联网兼职做什么挣钱比较多呢?…

DHCP Snooping讲解

DHCP Snooping时DHCP的一种安全特性,用于保证DHCP客户端从合法的DHCP服务器获取IP地址,并记录DHCP客户端IP地址与MAC地址等参数的对应关系,防止网络上针对DHCP攻击 通过配置信任端口和非信任端口来实现安全防护 信任接口 正常接收DHCP服务器响…

网络安全之暴力破解介绍及暴力破解Tomcat

网络安全之暴力破解介绍及应用场景一、暴力破解介绍1.1 暴力破解介绍1.2 暴力破解应用场景一、暴力破解Tomcat一、暴力破解介绍 1.1 暴力破解介绍 暴力破解字典:https://github.com/k8gege/PasswordDic 1.2 暴力破解应用场景 一、暴力破解Tomcat 登录Tomcat后台&a…

重磅通知!OpenAI又放大招:官宣开放API接口-3.5版本 需求大涨,机遇与挑战并存,谁能拔得头筹?

3月2日,在各大论坛网站霸榜了一个多月,ChatGPT相关话题的热度仍高居不下。这边热度未歇,那边研发ChatGPT的人工智能公司又在互联网上投下一颗重磅“炸弹”:OpenAI在其官方博客宣布,将开放ChatGPT和Whisper的模型API。 …