select函数_SQL高级功能:窗口函数
一、窗口函数有什么用?
在日常生活中,经常会遇到需要在每组内排名,比如下面的业务需求:
排名问题:每个部门按业绩来排名
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
想要每个班级内按成绩排名的结果
select *,
rank() over(partition by 班级 order by 成绩 desc) as ranking
from 班级表
为什么叫“窗口”函数?
因为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 班级表
从上面结果可以看出:
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 班级表
如上图,聚合函数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 班级表
每一行得到的结果,都是当前行和前面2行的平均(共3行)。
这样使用窗口函数有什么用呢?
在公司业绩名单排名中,可以通过移动平均,直观地查看到与相邻名次业绩的平均、求和等统计数据。
select函数_SQL高级功能:窗口函数相关推荐
- sql取整数_SQL高级功能
1.窗口函数 窗口函数用于日常工作中,经常会遇到的需要在每组内排名的问题,比如: 排名问题:每个部门按业绩来排名 topN问题:找出每个部门排名前N的员工进行奖励 此时需要使用sql的高级功能窗口函数 ...
- SQL高级功能-窗口函数及其经典题目
窗口函数 1.窗口函数有什么用? 2.什么是窗口函数? 3.如何使用窗口函数 1.专用窗口函数rank 2.专用窗口函数rank, dense_rank, row_number的区别 4.经典面试问题 ...
- sql取最大值的那一行_SQL高级功能
1. 什么是窗口函数?(---MySQL 8以上才有该函数---) 1) 窗口函数有什么用? 日常工作中,时常遇到需要在每组内排名,比如: 1.1 排名问题:每个部门按业绩排名 1.2 TopN问题: ...
- 阻塞、非阻塞的概念和select函数的阻塞功能
(1)阻塞block 所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回. 例如socket编程中conn ...
- 利用select 函数 实现sleep功能 达到纳米级
2019独角兽企业重金招聘Python工程师标准>>> 利用select 函数 实现sleep达到纳米级 . 当然这个数据计算出来不准确,本身就包含程序执行本身消耗的数量. 原理是把 ...
- sql over函数_SQL 高级函数
今天是高端局,都是超级高大上的内容,惯例上目录 今天觉得红黑配色好好看呀 今天没有什么具体的栗子合集,大家的应用场景都很不一样,so,到具体知识点,我们再具体举栗子. 窗口函数 概念: 窗口函数,也叫 ...
- sql server累计求和函数_SQL基础--SQL高级功能
一.窗口函数有什么用? 在日常工作中,经常会遇到需要在每组内排名,比如下面的业务需求: 排名问题:每个部门按业绩来排名 topN问题:找出每个部门排名前N的员工进行奖励 面对这类需求,就需要使用sql ...
- select函数fdwrite用法_通俗易懂的学会:SQL窗口函数
一.窗口函数有什么用? 在日常工作中,经常会遇到需要在每组内排名,比如下面的业务需求: 排名问题:每个部门按业绩来排名 topN问题:找出每个部门排名前N的员工进行奖励 面对这类需求,就需要使用sq ...
- 数据窗口retrieve查询结果生成新表_SQL系列之窗口函数及经典使用场景,如topN排名问题...
日常生活中,经常会遇到需要在每组内排名的问题,比如每个部门按业绩排名,找出每个部门排名前N的员工等,面对这类需求,就需要使用SQL的高级功能--窗口函数. 窗口函数,也叫联机分析处理函数(Online ...
最新文章
- 利用jQuery实现回收站删除效果
- Spring boot的Spring MVC自动配置
- springboot整合hibernate_峰哥说技术系列-17 .Spring Boot 整合 Spring Data JPA
- (转)解决fasterxml中string字符串转对象json格式错误问题(无引号 单引号问题)...
- 第5月第8天 jsonmodel
- TPL Dataflow组件应对高并发,低延迟要求
- 计算机检索技术与技巧的检索式为,第四章计算机检索技术和数据库检索方式.ppt...
- MAC电脑Command键怎么调换为Control键
- Oracle Telnet 1521 失败
- java snakeyaml_SnakeYaml快速入门和使用
- 关于电的计算机公式,电功率计算公式大全
- 通过存储控制器访问外设
- 计算机高级工程师职称评定条件,高级工程师职称评定条件是什么
- Android开发之智能聊天机器人
- 莫名奇妙的异常010:Unexpected server response (0) while retrieving PDF
- php特性之intval学习小记
- oracle 导出身份证号_oracle 根据身份证号计算出生日期
- wiringPi库与bcm_2835区别
- [转]Jexus的常用操作和基本配置
- 在二维码上添加图片主题(支持链接跳转)
热门文章
- for循环false 终止 python_python3.5.1给用户3次无效的尝试,然后终止pgm(Simple FOR循环)...
- C语言 实现登录注册功能
- Linux Ubuntu16.04界面美化
- 嵌入式Linux安装Python环境,linux环境下安装python 3
- 计算机语言低下限高上限,学习语言有没有上限
- ugui源码_UGUI整体解决方案基础篇(Unity 2019)
- 系统新模块增加需要哪些步骤_想要吸引人流,儿童乐园需要增加哪些新设备呢...
- android搭建opencv开发环境,Android Studio搭建opencv开发环境
- python全局变量global线程安全_对python多线程与global变量详解
- nodejs mysql 返回json_python向mysql中存储JSON及Nodejs取出