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

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

发布时间:2022-12-17 12:58:33 所属栏目: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进行分组,实现多重分组
 

(编辑:我爱制作网_池州站长网)

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