日期:2014-05-18  浏览次数:20619 次

求运动会成绩排名SQL
问题一:
表:田赛成绩
性别,项目,场次,姓名,出赛次序,成绩(m)
男,跳远,101,李一,1,4.86
男,跳远,101,李二,2,5.86
男,跳远,101,李三,3,3.86
男,跳远,102,李四,1,3.11
男,跳远,102,李五,2,4.11
男,跳远,102,李六,3,5.11

想要的结果:
性别,项目,场次,姓名,出赛次序,成绩(m),名次
男,跳远,101,李二,2,5.86,1
男,跳远,101,李一,1,4.86,2
男,跳远,101,李三,3,3.86,3
男,跳远,102,李六,3,5.11,1
男,跳远,102,李五,2,4.11,2
男,跳远,102,李四,1,3.11,3

我写了以下SQL,做到自动显示排名,但做不到分别按场次计排名,请高手指教,谢谢。

SELECT a1.姓名, a1.成绩, COUNT(a2.成绩) AS 名次
FROM 田赛成绩 a1, 田赛成绩 a2
WHERE a1.成绩 <= a2.成绩 or (a1.成绩=a2.成绩 and a1.姓名 = a2.姓名) 
GROUP BY a1.姓名, a1.成绩
ORDER BY a1.成绩 DESC, a1.姓名 DESC;


问题二:径赛是斗时间较短,语法又如何写?


------解决方案--------------------
SQL code

--#3修改后(把@田赛成绩 改成你的表名)
select * from 
(select *,
(select count(1) from 田赛成绩 where [成绩(m)]>=t.[成绩(m)] and 场次=t.场次) as 名次
from 田赛成绩 t
) aa order by 场次,名次