在一些应用场景中,我们经常会遇到一些排名的问题,比如按成绩、年级、热度排名。排名也有多种排名方式,如直接排名、分组排名,排名有间隔(同维度同排名,排名不连续)或排名无间隔等等。

创建测试表

CREATE TABLE t_scores (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`stu_number` INT ( 11 ) NOT NULL COMMENT '学号',
`score` INT ( 11 ) NOT NULL  COMMENT '分数',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = INNODB DEFAULT CHARACTER SET = utf8 COLLATE = utf8_general_ci;insert into t_scores (stu_number,score) values (1001,89),(1002,99),(1003,96),(1004,96),(1005,92),(1006,90),(1007,90),(1008,94);

普通排名

按分数高低直接排名,从1开始,往下排,类似于row number。下面我们给出查询语句及排名结果。

SELECT stu_number, score, @curRank := @curRank + 1 AS rank
FROM t_scores, (
SELECT @curRank := 0
) r
ORDER BY score desc;

排名无间隔

# 分数相同,名次相同,排名无间隔
# 查询语句
SELECT stu_number, score,
CASE
WHEN @prevRank = score THEN @curRank
WHEN @prevRank := score THEN @curRank := @curRank + 1
END AS rank
FROM t_scores,
(SELECT @curRank :=0, @prevRank := NULL) r
ORDER BY score desc;

间隔排序

# 另外一种排名方式是相同的值排名相同,相同值的下一个名次应该是跳跃整数值,即排名有间隔。
# 查询语句
SELECT stu_number, score, rank FROM
(SELECT stu_number, score,
@curRank := IF(@prevRank = score, @curRank, @incRank) AS rank,
@incRank := @incRank + 1,
@prevRank := score
FROM t_scores, (
SELECT @curRank :=0, @prevRank := NULL, @incRank := 1
) r
ORDER BY score desc) s;

MySQL统计排序,同分数同排名相关推荐

  1. mysql++月份排序_Mysql 按月份为组进行统计排序_MySQL

    SELECT YEAR(established_time) AS 'year' , MONTH(established_time) AS 'month' , COUNT(*) AS 'count' F ...

  2. mysql不同分数的人数,mysql如何统计每个专业分数段的人数

    mysql如何统计每个专业分数段的人数 发布时间:2020-03-20 15:02:26 来源:亿速云 阅读:532 作者:小新 mysql如何统计每个专业分数段的人数的呢?下面由亿速云小编给大家详细 ...

  3. 【MySQL】排序、合计、统计、平均值、最大值、最小值

    目录 MySQL的排序:order by MySQL的统计:count MySQL的合计:sum MySQL的平均值:avg MySQL的最大值.最小值:max,min 一.MySQL的排序:orde ...

  4. mysql 统计每人每年1-12月个个月的分数和总分、平均分

    mysql 统计每人每年1-12月个个月的分数和总分.平均分 初始化数据 DROP TABLE IF EXISTS `test_01`; CREATE TABLE `test_01` (`id` in ...

  5. 【MySQL】按各科成绩进行排序,并显示排名

    按各科成绩进行排序,并显示排名 select s_id,a.c_id,c_name,s_score,rank from ( select s_id,c_id,s_score, case when c_ ...

  6. mysql查询和某人一样_使用sql语句实现查询某人的排名,分数相同排名相同

    一.第一种形式排名 如:4个学生的分数分别是:100.90.90.80 排名结果为:第一.第二.第二.第三 SELECT count(DISTINCT score) FROM tbl_score WH ...

  7. SQL server 和 mysql 自动排序生成序列号

    mysql和sqlserver都是数据库有关的 mysql适合小型的数据库开发,而且免费开源的,一般和PHP一起开发小型企业或者个人网站一类的应用 sqlserver是微软开发的数据库软件,需要收费, ...

  8. linux日志中有空格,linux中统计排序的内容含有空白行的解决办法

    linux中统计排序的内容含有空白行的解决办法 废话不多说,直接上实例: 文件 sharkyun.log 的内容如下 [root@x201t ~]# cat -n sharkyun.log 1http ...

  9. MySQL || 结果排序--聚集函数讲解

    MySQL 结果排序-- 聚集函数 一.环境准备 二.查询结果排序 三.查询的分组与汇总 3.1.查一下 学生们平均年龄 3.2.查一下总人数是多少 3.3.查一下每个年龄有多少人 3.4.查出最大年 ...

最新文章

  1. Oracle 数据库中较为复杂或典型的 SQL 语句的解读
  2. 帝国cms如何安装php模板,2020帝国cms模板安装教程详细介绍
  3. Bootstrap三角箭头.caret 类
  4. 计算机辅助平面绘图是干嘛的,【1人回答】AutoCAD画图是什么,干什么用的?-3D溜溜网...
  5. 题目1120:全排列(回溯法)
  6. new delete 来申请动态二维数组空间
  7. 蓝色妖姬 t3200 linux连接
  8. Web票据在线打印和套打解决方案
  9. ptx760功能图解_ptx760对讲机使用教程
  10. 计算机《画图》教案学生状态,《初识“画图”》教案设计.doc
  11. Java开发面试简历这么写,命中率达70%
  12. mysql egt_ThinkPHP常用的运算符介绍eq|neq|gt|egt|lt|elt|heq|nheq
  13. 手机HTML拼图验证,jQuery支持移动端的滑动块拼图验证插件
  14. Linux系统下Jsp验证码显示不出来, nginx 返回500 解决方法
  15. php lumen auth,Lumen实现用户注册登录认证
  16. MS-RTOS --- 技术特点及其检测标准
  17. Linux系统磁盘分区及挂载 - fdisk
  18. Objective-C学习资源
  19. 2009年网易笔试题
  20. Python安装opencc

热门文章

  1. solaris9 x86安装D-LINK DFE-530TX网卡
  2. 写作套路:如何写论文摘要
  3. 读余文森《有效评课》
  4. 辉芒微单片机的c语言仿真器,辉芒微单片机
  5. 速通AOSP,成功编译调试Android源码
  6. 分布电容和杂散电容_杂散电容概述
  7. java多态怎么学_Java学习笔记---多态
  8. 脸上用激光手术点完痦子之后出现疤痕增生怎么处理比较好
  9. Latex ulem包设置下划线删除线强调文本等效果
  10. 总结归纳erf与erfc