各位大大,小弟有个问题不解,MYSQL中,
比如说有以下表结构和内容id(自动增加) 姓名 语文成绩 数学成绩 物理成绩
1 AA 50 60 70
2 BB 55 65 75
3 CC 40 46 80
4 DD 34 70 50
.......如果我想按语文成绩或者数学或者物理成绩排列,如何得到查询某人的语文成绩排名?? 比如说用户"CC"按物理成绩排名第一,或者"DD"按数学成绩排列第一,我如何输出这个第一??假设数据库中数据庞大,不是小数据!
谢谢帮忙,结帖人人有分!
比如说有以下表结构和内容id(自动增加) 姓名 语文成绩 数学成绩 物理成绩
1 AA 50 60 70
2 BB 55 65 75
3 CC 40 46 80
4 DD 34 70 50
.......如果我想按语文成绩或者数学或者物理成绩排列,如何得到查询某人的语文成绩排名?? 比如说用户"CC"按物理成绩排名第一,或者"DD"按数学成绩排列第一,我如何输出这个第一??假设数据库中数据庞大,不是小数据!
谢谢帮忙,结帖人人有分!
解决方案 »
- mssql2008的数据导入mysql中,工具mysqlworkbench ,关于字符集的问题
- WHERE Word = '高等学校' 与 Word LIKE '%校' 查询结果的奇怪问题
- 求mysql一个计算问题
- 关于mysql中MYD文件的大小问题
- 否mysql外键(这个特别类型的表 外键是自己表的主键 ) 不大支持高并发 ??
- mysql的一个奇怪的问题
- 用myodbc如何授权其它机器上连接服务器的mysql数据库?
- 请问PHPadmin怎么配啊~~~
- 错误应用程序 mysqld-nt.exe,版本 0.0.0.0,错误模块 mysqld-nt.exe
- mysql-connector-c++ 执行execute之后连接会关闭
- 查询最近7天过生日的用户记录的sql如何写,谢谢
- telnet mysql服务器时,出现失去与主机的连接的问题
(select count(*) from 表名 where 语文成绩>=t.语文成绩) as 语文排名,
(select count(*) from 表名 where 数学成绩>=t.数学成绩) as 数学排名,
(select count(*) from 表名 where 物理成绩>=t.物理成绩) as 物理排名
from 表名 as t
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 行受影响)
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 id,姓名,语文成绩,数学成绩,物理成绩,
[top 1]=(
select top 1 a
from (
select 语文排名 as a union all
select 数学排名 union all
select 物理排名)ta order by right(a,2) asc)
from
(select * ,
[语文排名]='语文排名'+rtrim((select count(1) from @ta where 语文成绩>a.语文成绩)+1)+'名',
[数学排名]='数学排名'+rtrim((select count(1) from @ta where 数学成绩>a.数学成绩)+1)+'名',
[物理排名]='物理排名'+rtrim((select count(1) from @ta where 物理成绩>a.物理成绩)+1)+'名'
from @ta a)tmpid 姓名 语文成绩 数学成绩 物理成绩 top 1
----------- ----- ----------- ----------- ----------- ----------------------
1 AA 50 60 70 语文排名2名
2 BB 55 65 75 语文排名1名
3 CC 40 46 80 物理排名1名
4 DD 34 70 50 数学排名1名