MySQL并列排名和顺序排名查询


本文摘自PHP中文网,作者步履不停,侵删。

准备。

1

创建一张叫scores的表,内容如下。因为测试排名,所以就用最简单的结构。

idscore
199
280
387
460
580
699

需求。

1

获取分数排名,要求并列排名。如果两个分数相同,则两个分数排名(rank)相同。名次之间不应该有“间隔”。

结果如下。

idscorerank
1991
6991
3872
2803
5803
4604

sql语句

1

2

select id, score, (select count(distinct(score)) from scores as b where b.score > a.score ) + 1 as rank from scores as a order by rank;

先把结果拿出来,然后再分析怎么思考这个问题。这里的查询关键字我都没有大写,个人习惯!应该是要大写的。

分析。

1

2

3

4

5

6

7

8

按照上面的需求,我们可以知道我们是要做一个按照分数(score)查询的一个功能,只不过是要给排序好的结果加上一个我们想要的名次。

我们笨想,我们要想知道某个分数排第几名,是不是知道有几个比它大就行了。如果有零个比它大的,那么它就是第一名,如果只有一个比它大,

那么它就是第二名。以此类推就好了。

那么我们来分析上面的sql语句。它就是把socres表分成了俩个一样的表,a 表,b表。然后通过子查询去查rank的值。

第一步:select id,score, rank from scores order by rank;我们查询我们要的信息,但是我们scores表中没有rank这个字段,所以就要分成俩个一

       样的表,做子查询,来查rank。

第二步:select id,score,(select count(score) from scores as b where b.score > a.score) + 1 as rank from scores as a order by rank;上面说过了

       如果0个比某分数大,那么它就是第一名。所以我们要再查询的个数上加1。结果如下:

SB4v2HuAmd.jpg

阅读剩余部分

相关阅读 >>

介绍mysql和jdbc的事务控制(tcl)

mysql怎么导出数据库?

mysql安装与卸载详细教程

mysql如何通过实例化对象参数查询数据 ?(源代码)

mysql开启慢查询日志的方法详解

navicat for mysql怎么用

mysql配置参数 my.inimy.cnf的详细解析

mysql文件存储图文详解

mysql索引做什么?

mysql的编译安装以及简单介绍

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...