加入收藏 | 设为首页 | 会员中心 | 我要投稿 徐州站长网 (https://www.0516zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL学习笔记:排名函数的用法比较

发布时间:2022-10-17 15:31:09 所属栏目:MySql教程 来源:互联网
导读: MySQL学习了有一段时间了,为了巩固学习成果,在网上找了些练习题做一做,其中一道题目与排名有关,因为不了解排名相关的函数,所以在网上搜寻一番,看到说MySQL没有rank()函数,遂吭哧吭哧

MySQL学习了有一段时间了,为了巩固学习成果,在网上找了些练习题做一做,其中一道题目与排名有关,因为不了解排名相关的函数,所以在网上搜寻一番,看到说MySQL没有rank()函数,遂吭哧吭哧找来了变量方法照葫芦画瓢进行排序。

但是这种方法到底是太过复杂,秉持着“常用的功能肯定早有前辈想到了最简单的方法”这种信条,到底让我找到了排名函数的相关用法(这里想说的是,虽说学习过程中自己钻研很重要,但是高效率解决问题也同样重要)。当然最重要的还要感谢前辈们的总结,我权且作为一个搬运工,此处仅为学习过程留个注脚,不严谨之处还请指出。

原始数据为一张分数表,SId,CId,score分别代表学生序号、课程序号和成绩,这里要对成绩进行排名。

MySQL 排序_mysql field排序_mysql 时间排序 desc

三种窗口函数分别为:

①rank() over(排序规则)

②row_number() over(排序规则)

③dense_rank() over(排序规则)

代码为:

SELECT
	sc.cid,
	sc.score,
	rank() over ( ORDER BY score DESC ) AS rank1,
	row_number() over ( ORDER BY score DESC ) AS rank2,
	dense_rank() over ( ORDER BY score DESC ) AS rank3 
FROM
	sc

结果为:

mysql 时间排序 desc_MySQL 排序_mysql field排序

很明显,根据结果可以看出:

①rank() over(排序规则):序列中出现相同的数值时排名相同,下一数值排名进行跳级;

②row_number() over(排序规则):无论序列中是否出现相同数值,排序顺次向下(私以为可以理解为计数)

③dense_rank() over(排序规则): 序列中出现相同的数值时排名相同,下一数值排名顺次向下,不进行跳级

注:除上述内容外MySQL 排序,row_number() over(partition by col1 order by col2)可以先对col1字段进行分组,再对col2进行分组,实现多重分组

(编辑:徐州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!