如何用SQL查询单个学生的成绩的排名?

_小亦_ 2014-08-26 01:47:07
我建了一个表,表名称:成绩表;表里有姓名,学号,总分,总分,排名等;
我用下面语句可以查出排名:
select 姓名,学号,总分,RANK() over(order by 总分 desc)排名
from 成绩表

我现在有个问题想请教,如何写SQL语句,来查询单个学生的的总分排名?
...全文
10239 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
_小亦_ 2014-08-27
  • 打赏
  • 举报
回复
引用 13 楼 Tiger_Zhao 的回复:
先自己添上排名字段 成绩更新后运行下面的语句

UPDATE 成绩表
   SET 排名 = T.排名
  FROM 成绩表,
        (select 姓名,学号,总分,row_number() over(order by 总分 desc)排名
           from 成绩表) T
 WHERE 成绩表.学号 = T.学号
以后就直接取排名了。
感激不尽!
_小亦_ 2014-08-27
  • 打赏
  • 举报
回复
引用 11 楼 Tiger_Zhao 的回复:
T 是别名,就像可以对字段用 姓名 AS name 一样取别名。AS 可省略。 而这里语法要求必须给子查询一个别名。
明白了,谢谢
Tiger_Zhao 2014-08-27
  • 打赏
  • 举报
回复
先自己添上排名字段
成绩更新后运行下面的语句

UPDATE 成绩表
SET 排名 = T.排名
FROM 成绩表,
(select 姓名,学号,总分,row_number() over(order by 总分 desc)排名
from 成绩表) T
WHERE 成绩表.学号 = T.学号

以后就直接取排名了。
reenjie 2014-08-27
  • 打赏
  • 举报
回复
如果兩個學生的分數一樣,他們的名次是怎樣排的,是一樣的還是有先後之分?
Tiger_Zhao 2014-08-27
  • 打赏
  • 举报
回复
T 是别名,就像可以对字段用 姓名 AS name 一样取别名。AS 可省略。
而这里语法要求必须给子查询一个别名。
_小亦_ 2014-08-27
  • 打赏
  • 举报
回复
引用 8 楼 Tiger_Zhao 的回复:
我4楼就是取学号='12345'的一个学生的总分、排名。 既然你没把排名存下来,即使查询一个学生的排名,也要先把全部学生做个排名才能出结果。 建议成绩表中加个排名字段,用 row_number() 求出来的值更新一次,用起来就方便了。 反正成绩不是时时变动的,用不着每次查询都重新计算。
小弟菜鸟一枚,能否麻烦您帮我写点SQL语句帮我?
_小亦_ 2014-08-27
  • 打赏
  • 举报
回复
引用 4 楼 Tiger_Zhao 的回复:
两位想复杂了,楼主的需求大概就是这样
SELECT *
  FROM (select 姓名,学号,总分,row_number() over(order by 总分 desc)排名
          from 成绩表) T
 WHERE 学号='12345'
我想请教下,后面的“T”是什么意思?
Tiger_Zhao 2014-08-27
  • 打赏
  • 举报
回复
我4楼就是取学号='12345'的一个学生的总分、排名。
既然你没把排名存下来,即使查询一个学生的排名,也要先把全部学生做个排名才能出结果。

建议成绩表中加个排名字段,用 row_number() 求出来的值更新一次,用起来就方便了。
反正成绩不是时时变动的,用不着每次查询都重新计算。
_小亦_ 2014-08-27
  • 打赏
  • 举报
回复
我的意思是,我可以查询某一个学生的总分,排名,而不是全部一起显示的。
bw555 2014-08-26
  • 打赏
  • 举报
回复
引用 4 楼 Tiger_Zhao 的回复:
两位想复杂了,楼主的需求大概就是这样
SELECT *
  FROM (select 姓名,学号,总分,row_number() over(order by 总分 desc)排名
          from 成绩表) T
 WHERE 学号='12345'
楼主应该就是这样的需求,++++
中国风 2014-08-26
  • 打赏
  • 举报
回复
理解同Tiger相同,估计是这样效果 写一种方法
select 姓名,学号,总分,isnull((select count(1) from 成绩表 where 总分>a.总分),0) +1 as 排名
from 成绩表 as a
where 学号='007'
Tiger_Zhao 2014-08-26
  • 打赏
  • 举报
回复
两位想复杂了,楼主的需求大概就是这样
SELECT *
FROM (select 姓名,学号,总分,row_number() over(order by 总分 desc)排名
from 成绩表) T
WHERE 学号='12345'
發糞塗牆 2014-08-26
  • 打赏
  • 举报
回复
怎么理解单个学生的成绩排名?学生自己各科成绩?但是按你的列,只有总分
Mr_Nice 2014-08-26
  • 打赏
  • 举报
回复
引用 楼主 sv2008337 的回复:
我建了一个表,表名称:成绩表;表里有姓名,学号,总分,总分,排名等; 我用下面语句可以查出排名:
select 姓名,学号,总分,RANK() over(order by 总分 desc)排名
from 成绩表
我现在有个问题想请教,如何写SQL语句,来查询单个学生的的总分排名?
row_number() 参考 http://technet.microsoft.com/zh-tw/library/ms186734.aspx
Mr_Nice 2014-08-26
  • 打赏
  • 举报
回复
select 姓名,学号,总分,row_number() over(order by 总分 desc) as 排名
from 成绩表

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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