日期:2014-05-16  浏览次数:20768 次

关于MYSQL索引排列的问题
各位大大,小弟有个问题不解,MYSQL中,
比如说有以下表结构和内容

id(自动增加)   姓名   语文成绩   数学成绩   物理成绩
1                       AA     50             60             70
2                       BB     55             65             75
3                       CC     40             46             80
4                       DD     34             70             50
.......

如果我想按语文成绩或者数学或者物理成绩排列,如何得到查询某人的语文成绩排名??   比如说用户 "CC "按物理成绩排名第一,或者 "DD "按数学成绩排列第一,我如何输出这个第一??假设数据库中数据庞大,不是小数据!
谢谢帮忙,结帖人人有分!

------解决方案--------------------
select *,
(select count(*) from 表名 where 语文成绩> =t.语文成绩) as 语文排名,
(select count(*) from 表名 where 数学成绩> =t.数学成绩) as 数学排名,
(select count(*) from 表名 where 物理成绩> =t.物理成绩) as 物理排名
from 表名 as t

------解决方案--------------------
declare @ta table(id int identity(1,1),姓名 varchar(5), 语文成绩 int, 数学成绩 int,物理成绩 int)
insert @ta select 'AA ', 50, 60, 70
insert @ta select 'BB ', 55, 65, 75
insert @ta select 'CC ', 40, 46, 80
insert @ta select 'DD ', 34, 70, 50


select * ,
[语文成绩排名]=(select count(1) from @ta where 语文成绩> a.语文成绩)+1,
[数学成绩排名]=(select count(1) from @ta where 数学成绩> a.数学成绩)+1,
[物理成绩排名]=(select count(1) from @ta where 物理成绩> a.物理成绩)+1
from @ta a

(1 行受影响)

(1 行受影响)

(1 行受影响)

(1 行受影响)
id 姓名 语文成绩 数学成绩 物理成绩 语文成绩排名 数学成绩排名 物理成绩排名
----------- ----- ----------- ----------- ----------- ----------- ----------- -----------
1 AA 50 60 70 2 3 3
2 BB 55 65 75 1 2 2
3 CC 40 46 80 3 4 1
4 DD 34 70 50 4 1 4

(4 行受影响)