一个实际工作中遇到的问题,请教各位

superdreaming 2005-01-18 10:14:54
一个实际工作中遇到的问题,请教各位,具体描述如下:

一张成绩表(有 姓名,成绩 两个字段),现进行排位次操作。

表里数据类似如下:

姓名 成绩分数

dd 100
AA 90
bb 86
FF 80
GG 80
EE 73
JJ 67
cc 56
HH 45

(表里的数据实际上是无序排列的,大约有13万条记录);

排位条件如下:

1、分数最高的学生 位次为第1位,

2、分数第二的 AA 90分 就排第二了;成绩相同的学生位次相同,则上表中的 FF GG 两个

3、学生 位次都为 第4位;那么 学生EE的 排位 为 第6位(即是所有分数高于EE的学生记录数加一)。

----------------------------------------------------------------------
现在我要根据某一个学生的成绩 查询计算他所占的位次很好 得到:

例如 学生GG 分数是80分,则他的位次计算如下:

select count(*) as wc from 成绩表 where 成绩分数 >80

得到的 结果wc 再加1 即 wc+1 就是 学生GG的所占的位次

----------------------------------------------------------------------

但实际要求的是 根据某一个位次值 来查询其对应的成绩分数,如果表中不存在这个位次就与这个

位次最接近的上一个位次和下一个位次,如上表,我要查询位次为4的成绩分数是多少(上表里是80),

我要查询位次为5的成绩分数是多少(因上表里没有第5位次,所以要查询得出表里没有第5位,与其最接近的是第4位和第6位次)

请问根据位次的值 怎么才能得到其对应的分数,如果表里没有这个位次就找出其最为接近的位次?谢谢!

请问根据位次的值 怎么才能得到其对应的分数,如果表里没有这个位次就找出其最为接近的位次?谢谢
...全文
86 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenyumao 2005-01-18
  • 打赏
  • 举报
回复
如果要处理重名,那就List李放个新建的bean,多一个字段,保存重名信息。
chenyumao 2005-01-18
  • 打赏
  • 举报
回复
query "select >80"
放到list中,内排序完毕,

要获得第几个,那就是List。get(i).希望对你有帮助。

*******如果没有好方法,那么笨方法就是好方法*******
drugon 2005-01-18
  • 打赏
  • 举报
回复
数据量比较大,建议用存储过程,另外用Group by来实现,前在学校好象写过这样的SQL,不过数据量没有这么大。
giant216 2005-01-18
  • 打赏
  • 举报
回复
用视图增加一个名次字段即可,同意huang_yb(海风)
不徻写代码 2005-01-18
  • 打赏
  • 举报
回复
去MS sql server区
huang_yb 2005-01-18
  • 打赏
  • 举报
回复
建议修改表结构,如果不能修改,就建立一视图,增加名次字段。

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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