mysql窗口函数排序(mysql窗口函数用法)

mysql窗口函数排序(mysql窗口函数用法)svg xmlns http www w3 org 2000 svg style display none svg

大家好,我是讯享网,很高兴认识大家。



 <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg> <p>这两天刷了一遍45道mysql面试题&#xff0c;其中排序问题&#xff0c;用5.7版本的方法解决有些复杂&#xff0c;而mysql 8.0之后的版本可以用<strong>窗口函数</strong>解决&#xff0c;相对容易些。</p> 

讯享网

注:查看mysql版本

讯享网

查询结果:
在这里插入图片描述
讯享网

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

  • 窗口函数的基本语法:
 
  • <窗口函数>的位置,可以放以下两种函数:
  1. 专用窗口函数:rank, dense_rank, row_number等专用窗口函数。
  2. 聚合函数,如sum. avg, count, max, min等

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

2.1 专用窗口函数rank

如对每个班级内按成绩排名

讯享网
  • partition by用来对表分组,在这个例子中,我们指定了按“班级”分组(partition by 班级);
  • order by子句的功能是对分组后的结果进行排序,默认是按照升序(asc)排列。在本例中(order by 成绩 desc)是按成绩这一列排序,加了desc关键词表示降序排列。

2.2其他专业窗口函数

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

 

得到结果:

在这里插入图片描述
可以看出:

rank函数:有并列名次时,会保留名次空缺;
dense_rank函数:有并列名次时,不会保留名次空缺;
row_number函数:不考虑并列名次的情况

注:在上述的这三个专用窗口函数中,函数后面的括号不需要任何参数,保持()空着就可以。

举个例子

题目:查询学生的总成绩,并进行排名,总分重复时保留名次空缺

使用窗口函数

讯享网

使用Mysql5.7版本的方法

 

查询结果:
在这里插入图片描述

2.3 聚合函数作为窗口函数

聚和窗口函数和上面提到的专用窗口函数用法完全相同,只需要把聚合函数写在窗口函数的位置即可,但是函数后面括号里面不能为空,需要指定聚合的列名

讯享网

输出结果:
在这里插入图片描述
如上图,聚合函数sum在窗口函数中,是对自身记录、及位于自身记录以上的数据进行求和的结果。比如0004号,在使用sum窗口函数后的结果,是对0001,0002,0003,0004号的成绩求和,若是0005号,则结果是0001号~0005号成绩的求和,以此类推。

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

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

3.1 函数语法

 

&lt;窗口函数&gt;的位置,可以放以下两种函数:

1) 专用窗口函数,比如rank, dense_rank, row_number等

2) 聚合函数,如sum. avg, count, max, min等

3.2 窗口函数有以下功能

1)同时具有分组(partition by)和排序(order by)的功能

2)不减少原表的行数,所以经常用来在每组内排名

3.3 注意事项

窗口函数原则上只能写在select子句中

小讯
上一篇 2025-06-08 17:05
下一篇 2025-06-06 18:55

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/198632.html