朋友问一条sql语句,看似简单实际难,本人写不出,请教下这里的达人。

qunhao 2010-12-10 11:17:48
在SQL Server 数据库中,有一个表StudentAchievement(学生成绩),它有三个字段:
StudentID(varchar(8),学生编号),CourseID(varchar(10),课程编号),Achievement(int ,成绩)
写一条SQL语句,筛选出每门课程的前两名的学生编号,课程编号,成绩并排序。

筛选出每门课程的前两名的学生,这个有点难,卡在这里写不出来。
...全文
90 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
coleling 2010-12-10
  • 打赏
  • 举报
回复
最有效率的方法是使用CROSS APPLY (above 2005)

select a.CourseID, b.StudentID, b.Achievement
from (select distinct CourseID from StudentAchievement) a
cross apply (select top (2) * from StudentAchievement where CourseID = a.CourseID order by Achievement desc) b


#1在存在成绩相同时,结果就会有问题。

记得结贴哦
水族杰纶 2010-12-10
  • 打赏
  • 举报
回复
select *
from StudentAchievement t
where Achievement in(select top 2 Achievement
from StudentAchievement
where CourseID=t.CourseID order by Achievement desc)
wangxiaofeiwuqiao 2010-12-10
  • 打赏
  • 举报
回复
coleling
  • 打赏
  • 举报
回复
向2#学习
  • 打赏
  • 举报
回复


SELECT CourseID,CourseID,Achievement FROM
(
SELECT (ROW_NUMBER() OVER(PARTITION BY CourseID ORDER BY Achievement desc)) AS rowid,CourseID,CourseID,Achievement FROM StudentAchievement )AS A
WHERE A.rowid IN (1,2)



也解决了 重复的问题。

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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