首页 > 数据库技术 > 详细

mysql数据库(2)--窗口函数之序号函数

时间:2021-05-27 11:25:51      阅读:34      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 一、什么是窗口函数

窗口函数也叫OLAP函数(Online Anallytical Processing,联机分析处理),可以对数据进行联机分析处理。

常见窗口函数的分类如上图所示,本节主要介绍窗口函数中的序号函数类

 二、窗口函数语法

select 窗口函数() over (partition by 用于分组的类别,order by 用于排序的列名)

 三、序号函数类的作用

1、解决排名问题,如对每个班级按成绩进行排名

2、解决TopX的问题,如每个班级前X名的学生

 四、序号函数类的用法

1、rank()

1 #按班级分类,将成绩降序排序
2 SELECT*,
3 rank() over ( PARTITION BY 班级 ORDER BY 成绩 DESC)  AS ranking  
4 FROM class; 

(1)rank()是排序函数,括号中不需要有参数;

(2)通过partition by将班级分类,相当于之前用过的group by子句功能,但是group by子句分类汇总会改变原数据的行数,而用窗口函数自救保持原行数。

2、dense_rank(),row_number()的用法与rank()相同,它们之间的区别在于:

以查询班级成绩为例,当出现成绩相同的情形时,

(1)在rank()函数,如果有并列情况,会占用下一个名次的位置,比如,成绩为100的学生有三个并列第一,那么99分的学生是第二名,通过rank()函数,名次是:1,1,1,4;

(2)dense_rank()函数中,如果有并列的情况,不会占用下一个名词,同用上个例子,名次是:1,1,1,2;

(3)在row_number()函数中,会忽略并列的情况,同用上述例子,名次是:1,2,3,4.

 

附录:TopN问题的模板

1 SELECT *
2 FROM (SELECT*,row_number() over (PARTITION BY 姓名 ORDER BY 成绩 DESC) AS ranking 
3 FROM test1) AS newtest
4 WHERE ranking<=N;

参考资料:

https://zhuanlan.zhihu.com/p/138282683

mysql数据库(2)--窗口函数之序号函数

原文:https://www.cnblogs.com/yif930916/p/14816580.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!