前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >浅谈MySQL窗口函数

浅谈MySQL窗口函数

作者头像
用户7569543
发布2022-02-25 09:29:30
1.1K0
发布2022-02-25 09:29:30
举报

前面我们给大家介绍了MySQL的基本入门知识,从本节课开始,我们将介绍MySQL进阶教程,今天首先给大家介绍MySQL中常用的窗口函数。

什么是窗口函数

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

那么在MySQL中,窗口函数主要用来解决什么问题呢?

  • 解决排名问题,例如,对每个班级按成绩排名
  • 解决TOPN问题,例如,找出每个班级成绩前三名的学生

基本语法

select 窗口函数 over (partition by 分组列名, order by 排序列名)as 别名

窗口函数的分类

  • 常用窗口函数:rank(),dense_rank(),row_number()等
  • 聚合函数:max(),min(),count(),sum(),avg()等

下面我们针对常用的窗口函数进行用法讲解。

窗口函数的用法

rank()函数

代码语言:javascript
复制
#按班级分类,将成绩降序排序SELECT*,rank() over ( PARTITION BY 班级 ORDER BY 成绩 DESC)  AS rank  FROM class;

说明

  • rank()是排序函数,括号中无参数;
  • 通过partition by对班级进行分组,通过order by按成绩降序排列,其后可以按升序asc或者降序desc排列;

总结

  • 窗口函数中的“窗口”表示范围,可以理解为将原数据按特定字段进行分组,然后用窗口函数实现分组计算;
  • 窗口函数可同时实现分组和排序功能;
  • 窗口函数不减少原表的行数

dense_rank()

说明

用法与rank()函数相同。

区别

当排序字段取值相同时,在rank()函数中,如果有并列情况,会占用下一个名次的位置,比如,成绩为100的学生有三个并列第一,那么99分的学生是第二名,通过rank()函数,名次分别为1,1,1,4;而在dense_rank()函数中,如果有并列的情况,不会占用下一个名词,名次分别为1,1,1,2;

row_number()

说明

用法与rank()函数相同。

区别

当排序字段取值相同时,在rank()函数中,如果有并列的情况,会占用下一个名次的位置,比如,成绩为100的学生有三个并列第一,那么99分的学生是第二名,通过rank()函数,名次分别为1,1,1,4;而在row_number()函数中,会忽略并列的情况,名次分别为1,2,3,4;

注:窗口函数中如果省略partition by,则结果不进行分组,以整个表为范围,也就是窗口为整个表;如果省略order by 则不进行排序,窗口函数一般写在select子句中;

窗口函数和聚合函数的区别

①聚合函数是将多条记录聚合为一条,例如对整体求最大值/最小值/均值等;而窗口函数中每条记录都会执行,执行完记录数不变。

②聚合函数也可以用于窗口函数。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-01-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 多赞云数据 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前面我们给大家介绍了MySQL的基本入门知识,从本节课开始,我们将介绍MySQL进阶教程,今天首先给大家介绍MySQL中常用的窗口函数。
  • 什么是窗口函数
    • 窗口函数和聚合函数的区别
    相关产品与服务
    云数据库 SQL Server
    腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档