您的位置:首页 > 数据库

查询排名 sql

2014-03-26 09:55 204 查看

结构为

user scores

1 80

2 7

3 99

4 58


..

比如我想计算user=4在此表中的排名应该如何做?

SELECT COUNT( * ) FROM user_test WHERE scores >= ( SELECT scores FROM user_test

WHERE user =4 )

--参数说明:

--sc 表名

--name 人名

--mark 分数

--ord 名次

1、并列,有空档,名次是不连续的(有两个第二名,接下来的就是第四名)。

update sc set ord=(select count(*)+1 from sc B where B.mark>sc.mark)

说明:其实就是求出分数比他多的人数,再加上1。

2、并列,无空档,名次总是连续的

update sc set ord=(select count(*) from (select distinct mark from sc) as distmark where distmark.mark >=sc.mark)

说明:select distinct mark from sc 是求出不重复的分数,然后看你的分数排在哪个位置。

--1. 名次生成方式1,Score重复时合并名次

SELECT *,Place=(SELECT COUNT(DISTINCT Score) FROM tb WHERE Score>=a.Score)

FROM tb a

ORDER BY Place

/*--结果

Name Score Place

---------------- ----------------- -----------

aa 99.00 1

ee 78.00 2

gg 78.00 2

dd 77.00 3

ff 76.00 4

bb 56.00 5

cc 56.00 5

ff 50.00 6

--*/

--2. 名次生成方式2,Score重复时保留名次空缺

SELECT *,Place=(SELECT COUNT(Score) FROM tb WHERE Score>a.Score)+1

FROM tb a

ORDER BY Place

/*--结果

Name Score Place

--------------- ----------------- -----------

aa 99.00 1

ee 78.00 2

gg 78.00 2

dd 77.00 4

ff 76.00 5

bb 56.00 6

cc 56.00 6

ff 50.00 8

--*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: