select函数_SQL高级功能:窗口函数

74d96c5dd410894d0b1e064e4bf4afe0.png

一、窗口函数有什么用?

在日常生活中,经常会遇到需要在每组内排名,比如下面的业务需求:

排名问题:每个部门按业绩来排名

topN问题:找出每个部门排名前N的员工进行奖励

面对这类需求,就需要使用sql的高级功能窗口函数了。

二、什么是窗口函数,也叫OLAP函数(Online Anallytical Processing,联机分析处理),可以对数据库数据进行实时分析处理。

窗口函数基本语法如下:

<窗口函数> over (partition by <用于分组的列名> order by<用于排序的列名>)

窗口函数的位置,可以放以下两种函数:

1)专用窗口函数:rank,dense_ rank, row_number

2) 聚合函数:sum,avg,count,max,min

因为窗口函数是对where 或者group by 子句处理后的结果进行操作,所以窗口函数原则上只能写在select 子句中。

1.专用窗口函数rank

a08bb3f0e104c0a7723176bd5ac22c12.png

想要每个班级内按成绩排名的结果

select *,
rank() over(partition by 班级 order by 成绩 desc) as ranking
from 班级表

b7f8fc99feeec4eb1f85ba2c2e159e55.png

为什么叫“窗口”函数?

因为partition by分组后的结果称为“窗口”,表示“范围”的意思。

简单来说,窗口函数有以下功能:

1)同时具有分组和排序的功能

2)不减少原表的行数

3)语法见前

2.专用窗口函数rank,dense_rank, row_number有什么区别?

select *,
rank() over(order by 成绩 desc) as ranking
dense_rank() over(order by 成绩 desc) as dense_rank
row_number() over(order by 成绩 desc) as row_num
from 班级表

15e97823a872c788dd7d58989cce78ff.png

从上面结果可以看出:

rank 函数:如果有并列名次的行,会占用下一名次的位置。

dense_rank 函数:如果有并列名次的行,不占用下一名次的位置。

row_number函数:不考虑并列名次的情况。

3. top N问题

每组最大的N条记录

select * 
from (select *,row_number() over(partition by 要分组的列名order by 要排序的列名 desc) as ranking from 表名)
where ranking<=N;

4.聚合窗口函数

select *,
sum(成绩) over(order by 学号) as current_sum
from 班级表

e91bf869b7a24fdc5fa9aa6d01797e69.png

如上图,聚合函数sum在窗口函数中,是对自身记录、及位于自身记录以上的数据进行求和的结果。平均、计数、最大最小值也是同理。

这样使用窗口函数有什么用?

聚合函数作为窗口函数,可以在每一行的数据里直观的看到,截止到本行数据,统计数据是多少(最大值、最小值等)。同时可以看出每一行数据,对整体统计数据的影响。

5.查找单科成绩高于该科目平均成绩的学生名单

1)窗口函数法

select * 
from(select *,avg(成绩) over(partition by 科目) as avg_score from 成绩表) as b
where 成绩>avg_score

2)关联子查询法

见之前文章

6.窗口函数的移动平均

select *,
avg(成绩) over(order by 学号 rows 2 preceding) as current_avg
from 班级表

232394e5933cd8993f97ed388c7be29c.png

每一行得到的结果,都是当前行和前面2行的平均(共3行)。

这样使用窗口函数有什么用呢?

在公司业绩名单排名中,可以通过移动平均,直观地查看到与相邻名次业绩的平均、求和等统计数据。

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

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

相关文章

发挥项目“临时性”威力,让项目顺利实施

所谓临时性,就是要有明确的“开始”和“结束”。虽然大家都知道项目一定会有开始和结束的,但要更多地关注“明确“。 问题1:问商务(售前)或业主,这个项目什么时候结束? 答:商务或业主他们有时候也不知道,因为国内的项目大多数是提前开始交付,是一边交付,一边把里程…

上拉加载更多后台数据_6-7【微信小程序全栈开发课程】记录页面(七)--分页加载记录数据...

现在是一次性加载所有的记录数据&#xff0c;数据多的时候&#xff0c;会加载比较慢&#xff0c;所以我们改成分页加载&#xff0c;一次最多加载15条数据每次拉倒底部都会自动加载下一页的数据&#xff0c;知道所有的数据加载完成1、添加data变量编辑record.vue文件&#xff0c…

spring cloud eureka服务注册和调用

SPRING INITIALIZR构建工程 spring boot 可通过SPRING INITIALIZR构建项目访问SPRING INITIALIZR官网&#xff0c;填写项目相关信息后&#xff0c;生成项目。将下载的项目解压&#xff0c;打开idea&#xff0c;file-->new-->project from existing sources。import proje…

打印工资条怎么做到每个人都有表头明细_朋友说:能不能用python,帮我写一个“制作工资条”的自动化程序?...

本文说明今天和一个朋友吃饭&#xff0c;她说我经常使用Excel制作工资条&#xff0c;但是每个月都要做一遍&#xff0c;你能不能用python写一个代码&#xff0c;能够自动化完成这个工作。这当然可以啦&#xff0c;就是这么牛逼&#xff01;我们先来看看原始数据是什么样子的。那…

做优化的数据库工程师请参考!CynosDB的计算层设计优化揭秘

本文由云社区发表本文作者&#xff1a;孙旭&#xff0c;腾讯数据库开发工程师&#xff0c;9年数据库内核开发经验&#xff1b;熟悉数据库查询处理&#xff0c;并发控制&#xff0c;日志以及存储系统&#xff1b;熟悉PostgreSQL&#xff08;Greenplum&#xff0c;PGXC等&#xf…

netty发送数据_看完这篇还不清楚Netty的内存管理,那我就哭了

说明在学习Netty的时候&#xff0c;ByteBuf随处可见&#xff0c;但是如何高效分配ByteBuf还是很复杂的&#xff0c;Netty的池化内存分配这块还是比较难的&#xff0c;很多人学习过&#xff0c;看过但是还是云里雾里的&#xff0c;本篇文章就是主要来讲解&#xff1a;Netty分配池…

数字化改革体系架构“152”两次迭代升级为“1612”

数字化改革体系架构已经完成两次迭代&#xff0c;152-1512-1612。 2021年&#xff0c;浙江在全国率先启动一项关系全局、影响深远、制胜未来的重大集成改革——数字化改革&#xff0c;并确定为全面深化改革的总抓手。 2021年2月18日&#xff0c;数字化改革大会“152”工作体系…

python 40位的数减个位数_Python数据分析入门教程(五):数据运算

作者 | CDA数据分析师进行到这一步就可以算是开始正式的烹饪了&#xff0c;在这部分之前的数据操作部分我们列举了一些不同维度的分析指标&#xff0c;这一章我们主要看看这些指标都是怎么计算出来的。一、算术运算算术运算就是基本的加减乘除&#xff0c;在Excel或者Python中数…

数字化改革“152”体系详解

架构图 “1” 即一体化智能化公共数据平台&#xff08;平台大脑&#xff09;&#xff0c;按照“统一规划、统一支撑、统一架构、统一平台、统一标准、统一建设、统一管理、统一运维"的要求&#xff0c;建设省市县三级公共数据平台&#xff0c;叠加三级“大脑功能&#xf…

数字化改革“141”体系

县级以上是“152”大框架&#xff0c;县以下是“141”体系。 141体系是&#xff1a;县级社会治理中心、乡镇&#xff08;街道&#xff09;基层治理“四个平台”、村社网格。 “1” 第一个“1”指县级社会治理中心。 “4” 第二个“4”指乡镇&#xff08;街道&#xff09;基…

接口做的好怎么形容_淘宝直播预告怎么做才合格?如何做好?

很多淘宝商家在直播前没有做淘宝直播预告&#xff0c;或者不知道怎么去做直播预告&#xff0c;这对直播的效果会有很大的影响&#xff0c;那么直播前如何做好直播预告呢?怎样的直播预告才是合格的&#xff0c;下面来了解一下。1.必须去淘宝直播中控台发布。因为手机上发布目前…

“1+7+N”改革工作体系介绍

2021年&#xff0c;浙江省确定了“17N”的改革工作体系&#xff0c;要求以全面深化改革新成效再创体制机制新优势。&#xff08;2022年已经升级为“1612N”&#xff0c;点击阅读&#xff09; “1” 数字化改革&#xff0c;这是浙江全面深化改革的总抓手。将聚焦打造全球数字变…

浙江省数字化改革回顾(2022年5月)

事业的伟大在于目标的壮丽&#xff0c;也在于过程的壮丽&#xff1b;改革的成果在于享有的丰富&#xff0c;也在于经历的丰富。2021年2月18日&#xff0c;春节假期后首个工作日&#xff0c;浙江省委召开全省数字化改革大会&#xff0c;在全国率先开启数字化改革探索实践。此后&…

python 某个数是不是在某个范围内_教写一个简单的python小程序(04)

点击蓝字关注我们 会酸的柚子Python爱好者搞机少年七夕结束了~酸柚也是被强塞了满嘴的狗粮在这样充满恋爱腐朽气息的一天酸柚也是马不停蹄的在赶稿子兄弟们&#xff0c;给我顶起来呀~我们来看看今日的题目可能很多小伙伴对完全平方数这个概念有点生疏了完全平方数数学上&#x…

浙江公布2022年数字化改革“最系列“成果 评选出最佳应用104项

10月29日&#xff0c;省委改革办&#xff08;省数改办&#xff09;公布了2022年数字化改革“最系列”成果。该评选由省委改革办&#xff08;省数改办&#xff09;会同省委政研室、省人大常委会法工委、省市场监管局和省大数据局共同开展&#xff0c;评选了最佳应用104项、最强大…

dot net core 使用 IPC 进程通信

原文:dot net core 使用 IPC 进程通信版权声明&#xff1a;博客已迁移到 http://lindexi.gitee.io 欢迎访问。如果当前博客图片看不到&#xff0c;请到 http://lindexi.gitee.io 访问博客。本文地址 https://blog.csdn.net/lindexi_gd/article/details/79946496 dot net core 使…

Android手机用wifi连接adb调试的方法

https://www.jianshu.com/p/dc6898380e38 0x0 前言 Android开发肯定要连接pc的adb进行调试&#xff0c;传统的方法是用usb与pc进行连接&#xff0c;操作简单即插即用&#xff0c;缺点是pc上必须得有对应手机的usb驱动程序&#xff0c;对于谷歌亲儿子系列和三星摩托等外国品牌而…

控制台应用程序换换为窗体应用_Epic为开发者设计了一套iPhone使用的运动捕捉应用程序...

玩懂手机网7月13日资讯&#xff0c;我们都知道对于游戏或者是动漫开发者来说&#xff0c;运动捕捉设备是一套非常昂贵的设备&#xff0c;需要非常专业的独立开发人员&#xff0c;大量的时间才能完成&#xff0c;最近Epic为开发者设计了一套iPhone使用的运动捕捉应用程序。这套i…

蚂蚁金服亿级并发下的移动端到端网络接入架构解析

为了与金融从业者、科技从业者共同探讨金融 业务的深层次问题&#xff0c;蚂蚁金服联手 TGO 鲲鹏会上海分会&#xff0c;在 12 月 8 日举办了「走进蚂蚁金服&#xff1a;双十一背后的蚂蚁金服技术支持」活动。蚂蚁金服高级技术专家贾岛为大家分享了《亿级并发下的蚂蚁移动端到…

如何根据视频的宽屏与竖屏来排序?

原理 宽屏与竖屏是根据 帧高度 与 帧宽度 来区分的 帧高度就是图片高度&#xff08;纵向的像素尺寸&#xff09;&#xff0c;帧宽度就是图片宽度&#xff08;横向的像素尺寸&#xff09;&#xff0c;分辨率就是&#xff08;高度x宽度&#xff09;。 windows11的文件排序&…