统计排名的问题

ccshigenvwa 2011-11-15 11:40:46



学生 班级 分数
学生A A班 100
学生B B班 90
学生C C班 80
学生D A班 70
学生E B班 60
学生F C班 50
学生G A班 40
学生H B班 30
学生I C班 20
学生J C班 10


查询结果是
学生 班级 分数 班级内排名 全校排名
学生A A班 100 1 1
学生D A班 70 2 4
学生G A班 40 3 7

这个意思就是说在只查询这个班级的学生的时候计算出这个学生在这个班级内的排名,而且还要计算出这个学生在全校的排名,以此类推还有可能计算这个学生在全市的排名等等,

如果单单查询这个班级的学生成绩并得到排名这个也许好弄我的方式是

SELECT ISNULL(成绩字段,0),
ROW_NUMBER() OVER(ORDER BY ISNULL(成绩字段,0) DESC)
FROM 学生成绩表


但是假如还要计算这个学生在全年校排名或者更多的情况下,如果采用高效的方法得到?
...全文
110 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2011-11-15
  • 打赏
  • 举报
回复
use Tempdb
go
--> -->

if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([学生] nvarchar(3),[班级] nvarchar(2),[分数] int)
Insert #T
select N'学生A',N'A班',100 union all
select N'学生B',N'B班',90 union all
select N'学生C',N'C班',80 union all
select N'学生D',N'A班',70 union all
select N'学生E',N'B班',60 union all
select N'学生F',N'C班',50 union all
select N'学生G',N'A班',40 union all
select N'学生H',N'B班',30 union all
select N'学生I',N'C班',20 union all
select N'学生J',N'C班',10
Go
SELECT
学生,班级,分数,班级内排名,全校排名
FROM
(Select
*,DENSE_RANK()OVER(ORDER BY [分数] desc) AS 全校排名,班级内排名=DENSE_RANK()OVER(PARTITION BY [班级] ORDER BY 分数 desc)
from #T
)T
WHERE [班级]=N'A班' AND 班级内排名<=3
/*
学生 班级 分数 班级内排名 全校排名
学生A A班 100 1 1
学生D A班 70 2 4
学生G A班 40 3 7
*/
中国风 2011-11-15
  • 打赏
  • 举报
回复
use Tempdb
go
--> -->

if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([学生] nvarchar(3),[班级] nvarchar(2),[分数] int)
Insert #T
select N'学生A',N'A班',100 union all
select N'学生B',N'B班',90 union all
select N'学生C',N'C班',80 union all
select N'学生D',N'A班',70 union all
select N'学生E',N'B班',60 union all
select N'学生F',N'C班',50 union all
select N'学生G',N'A班',40 union all
select N'学生H',N'B班',30 union all
select N'学生I',N'C班',20 union all
select N'学生J',N'C班',10
Go
SELECT *,排名
FROM
(Select
*,DENSE_RANK()OVER(ORDER BY [分数] desc) AS 排名,班內=DENSE_RANK()OVER(PARTITION BY [班级] ORDER BY 分数 desc)
from #T
)T
WHERE [班级]=N'A班' AND 班內<=3

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧