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

帮忙写一Sql语句
一张表有三个字段 学号,课程,成绩
现在需要查询出每门课程的前三名(课程数未知)


求各位帮帮忙,给个解!(最好附带写点说明--真心感谢)

------解决方案--------------------
SQL code
select * from 
(select no=row_number() over(partition by 课程 order by 成绩 desc),* from tb) t
where no<4

------解决方案--------------------
SQL code
select * from tab a
where (select count(*) from tab where 课程 = a.课程 and 成绩 >= a.成绩) <= 3

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

;WITH
DD AS(
SELECT C#,GRADE,ROW_NUMBER()OVER(PARTITION BY C# ORDER BY GRADE DESC) PM
FROM SC
GROUP BY C#,GRADE
)
SELECT *
FROM DD
WHERE PM<=3
---
/*结果:这是我的学生数据库 跟你要的一个样,这是这里保存的是课程号 你把它改为课程名就OK
C#         GRADE                                   PM
---------- --------------------------------------- --------------------
042077     85.0                                    1
042077     84.0                                    2
042077     81.0                                    3
042078     92.0                                    1
042078     85.0                                    2
042078     80.0                                    3
042079     90.0                                    1
042079     85.0                                    2