小白养成记——MySQL中的排名函数
1.ROW_NUMBER() 函数
依次排序,没有并列名次。如
SELECT st.ID '学号', st.`NAME` '姓名', sc.SCORE '成绩', ROW_NUMBER() OVER(ORDER BY sc.SCORE DESC) '排名'
FROM Student st
LEFT JOIN Score sc ON sc.STUDNET_ID = st.ID
查询结果为

可以看出,尽管存在相同的成绩(98.0、91.0),但是排名并没有并列,而是按顺序依次排号。
2.RANK() 函数
有并列名次,且并列名次会占用序号,因此名次之间可能会有间隔。如
SELECT st.ID '学号', st.`NAME` '姓名', sc.SCORE '成绩', RANK() OVER(ORDER BY sc.SCORE DESC) '排名'
FROM Student st
LEFT JOIN Score sc ON sc.STUDNET_ID = st.ID
查询结果为

可以看出,相同的成绩(98.0、91.0)的排名是相同的(并列第2名、并列第5名),且并列的名次会占用序号,因此与它下一个名次之间会有间隔。
显然这种结果是最符合实际生活中的排名的。
3.DENSE_RANK() 函数
有并列名次,但并列名次不占用序号,因此名次都是紧密相连的。如
SELECT st.ID '学号', st.`NAME` '姓名', sc.SCORE '成绩', DENSE_RANK() OVER(ORDER BY sc.SCORE DESC) '排名'
FROM Student st
LEFT JOIN Score sc ON sc.STUDNET_ID = st.ID
查询结果为

可以看出,相同的成绩(98.0、91.0)的排名是相同的(并列第2名、并列第5名),但并列的名次并会占用序号,因此与它下一个名次之间没有间隔,所有名次都是紧密相连的。
4.NTILE() 函数
NTILE(n) 函数可以将返回的结果排序,如
SELECT st.ID '学号', st.`NAME` '姓名', sc.SCORE '成绩', NTILE(4) OVER(ORDER BY sc.SCORE DESC) '组号'
FROM Student st
LEFT JOIN Score sc ON sc.STUDNET_ID = st.ID
表示将成绩按从大到小排序后,把结果分为4组。由于总记录数为8条,因此每组会有2条记录:

这样每组的记录数是均匀的。
但如果查询结果的总记录数不能被指定的要分的组的总数整数,则分得的每组中的记录数是不均匀的,如
SELECT st.ID '学号', st.`NAME` '姓名', sc.SCORE '成绩', NTILE(3) OVER(ORDER BY sc.SCORE DESC) '组号'
FROM Student st
LEFT JOIN Score sc ON sc.STUDNET_ID = st.ID

由于 8 不能被 3 整除,因此得到的 3 组中每组的记录数不是完全一样的,而是按照 3、3、2 分配的,即"尽量"保证了均匀。
小白养成记——MySQL中的排名函数的更多相关文章
- 小白养成记——Linux中的用户和权限管理
1.用户组管理 每个用户都属于一个用户组,系统可以对一个用户组中的所有用户进行集中管理. 在创建用户时,如果未指定组,则系统会创建一个与用户名同名的组. 以下是关于用户组管理的一些基本命令: 新建用户 ...
- Mysql中使用find_in_set函数查找字符串
mysql有个表的字段的存储是以逗号分隔的,如domain字段login.s01.yy.com,s01.yy.com,s02.yy.com.现在要查找s01.yy.com这个.我们用like查找好像不 ...
- mysql中的group_concat函数的用法
本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) . MySQL中group_concat函数 完整的语法如下: grou ...
- SQLServer 中实现类似MySQL中的group_concat函数的功能
SQLServer中没有MySQL中的group_concat函数,可以把分组的数据连接在一起. 后在网上查找,找到了可以实现此功能的方法,特此记录下. SELECT a, stuff((SELECT ...
- SQL点滴20—T-SQL中的排名函数
原文:SQL点滴20-T-SQL中的排名函数 提到排名函数我们首先可能想到的是order by,这个是排序,不是排名,排名需要在前面加个名次序号的,order by是没有这个功能的.还可能会想到ide ...
- mysql中的substr()函数
mysql中的substr()函数和hibernate的substr()参数都一样,就是含义有所不同. 用法: substr(string string,num start,num length); ...
- Mysql中常用的函数汇总
Mysql中常用的函数汇总: 一.数学函数abs(x) 返回x的绝对值bin(x) 返回x的二进制(oct返回八进制,hex返回十六进制)ceiling(x) 返回大于x的最小整数值exp(x) 返回 ...
- Mysql中使用聚合函数对null值的处理
平时因为对于数据库研习的不深,所以在面试的时候问了一些平常遇到过的问题居然没法很肯定地回答出来,实在让自己很恼怒! 这次让我记忆深刻的一个问题是: 在mysql中使用聚合函数的时候比如avg(t),t ...
- Mysql中的常用函数:
Mysql中的常用函数: 1.字符串函数: (1).合并字符串 concat():// concat('M','y',"SQL",'5.5');== MySQL5.5//当传入的参 ...
随机推荐
- DEDECMS:修改DEDECMS会员中心发送邮件时,邮件内容里出现在DEDE链接
1.在member/index_do.php里,把文件里的 $mailbody .= "Power by http://www.dedecms.com 织梦内容管理系统!\r\n" ...
- php之PDOStatement::execute数组参数带有键值会出错
当预处理的SQL语句是用问号占位符时,如果是用数组传参的,数组里不要带有键值,否则无法执行SQL. 出错的代码如下: $test = new PDODB(); $param=["d" ...
- 面试官:请讲一下Redis主从复制的功能及实现原理
摘要:Redis在主从模式下会有许多问题需要考虑,这里写了一些关于redis在多服务器下的一些问题分析和总结. Redis单节点存在单点故障问题,为了解决单点问题,一般都需要对redis配置从节点,然 ...
- DOM分类及HTML DOM
DOM简介 DOM是W3C(World Wide Web Consortium)标准. "W3C 文档对象模型(DOM,全称Document Object Model)"是一个使程 ...
- B 等差素数列
B 等差素数列:2,3,5,7,11,13,....是素数序列.类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列.上边的数列公差为30,长度为6.2004年,格 ...
- 【洛谷 p3390】模板-矩阵快速幂(数论)
题目:给定n*n的矩阵A,求A^k. 解法:利用矩阵乘法的定义和快速幂解答.注意用负数,但是数据太弱没有卡到我......(P.S.不要在 typedef long long LL; 前使用 LL. ...
- fzu2200 cleaning
Problem Description N个人围成一圈在讨论大扫除的事情,需要选出K个人.但是每个人与他距离为2的人存在矛盾,所以这K个人中任意两个人的距离不能为2,他们想知道共有多少种方法. In ...
- JVM调优参数、方法、工具以及案例总结
这种文章挺难写的,一是JVM参数巨多,二是内容枯燥乏味,但是想理解JVM调优又是没法避开的环节,本文主要用来总结梳理便于以后翻阅,主要围绕四个大的方面展开,分别是JVM调优参数.JVM调优方法(流程) ...
- k8s二进制部署 - harbor安装
harbor安装 # 目录说明: # /opt/src : 源码.文件下载目录 # /opt/release : 各个版本软件存放位置 # /opt/apps : 各个软件当前版本的软链接 [root ...
- K8S(01)二进制部署实践-1.15.5
系列文章说明 本系列文章,可以基本算是 老男孩2019年王硕的K8S周末班课程 笔记,根据视频来看本笔记最好,否则有些地方会看不明白 需要视频可以联系我 目录 系列文章说明 1 部署架构 1.1 架构 ...