查询排名 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
--*/
结构为
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
--*/
相关文章推荐
- 查询数据排名情况SQL
- 设计数据库的,编写SQL查询,返回优等生名单(排名10%),以平均分排序
- SQL 查询排名是第三位的人
- SQL-查询排名
- 数据库排名sql,group by 分组查询按照时间最大值
- 查询数据排名情况SQL
- SQL学习之查询技巧 查询第3的数据 用一条语句分组,排序 并查询某一排名
- sql:查询课程号'0312091006'成绩排名第5到第10之间的学生学号
- SQL查询排名函数实例
- sql 建表以及查询---复杂查询之成绩排名
- Mysql将查询后的数据进行排名的SQL语句
- 查询数据排名情况SQL
- 数据库排名sql,group by 分组查询按照时间最大值
- SQL:查询排名
- SQL学习之查询技巧 查询第3的数据 用一条语句分组,排序 并查询某一排名
- sql查询排名以及springmvc实现
- 一道简单的SQL面试题:查询成绩排名第10到第20的学生
- 设计数据库的,编写SQL查询,返回优等生名单(排名10%),以平均分排序
- sql查询排名问题
- SQL查询排名函数实例