SQL 问题 ,有点难???

zhongwanli 2005-05-28 11:19:33
有一个表 StudentAchievement (学生成绩) , 它有三个字段: StudentID(varchar(8), 学生编号 ) , CourseID(varchar(10), 课程编号 ) , Achievement(int ,成绩 ) ,写一条 SQL 语句,筛选出每门课程的前两名的学生编号,课程编号,成绩并排序
...全文
115 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhongwanli 2005-05-30
  • 打赏
  • 举报
回复
谢谢,结帖!
paoluo 2005-05-28
  • 打赏
  • 举报
回复
思路:
第一名的数据在数据库中没有比当前Achievement高的记录。
第而名的数据在数据库中比当前Achievement高的记录只有一条,
其余的就是满足条件的记录。

那段语句就是在数据库中查询,看有没有和当前记录的 CourseID相同,但是 Achievement比当前记录大的,如果满足条件的条数大于1,就是不满足条件的。

剔除那些不满足条件的,剩下的就是满足条件的了。
zhongwanli 2005-05-28
  • 打赏
  • 举报
回复
讲讲思路
paoluo 2005-05-28
  • 打赏
  • 举报
回复
--建立测试环境
Create table StudentAchievement
(CourseID Varchar(10),
StudentID Varchar(8),
Achievement Int)
--插入数据
Insert StudentAchievement Values('3-245', '103', 86)
Insert StudentAchievement Values('3-245', '105', 75)
Insert StudentAchievement Values('3-245', '109', 68)
Insert StudentAchievement Values('3-105', '103', 92)
Insert StudentAchievement Values('3-105', '105', 88)
Insert StudentAchievement Values('3-105', '109', 76)
Insert StudentAchievement Values('3-105', '101', 64)
Insert StudentAchievement Values('3-105', '108', 78)
Insert StudentAchievement Values('6-166', '101', 85)
Insert StudentAchievement Values('6-166', '107', 79)
Insert StudentAchievement Values('6-166', '108', 81)
--测试
Select * from StudentAchievement A
Where Not Exists(Select 1 from StudentAchievement Where CourseID=A.CourseID And Achievement>A.Achievement Having Count(*)>1)
Order by CourseID,Achievement Desc
--删除测试环境
Drop Table StudentAchievement
--结果
/*
CourseID StudentID Achievement
3-105 103 92
3-105 105 88
3-245 103 86
3-245 105 75
6-166 101 85
6-166 108 81
*/
paoluo 2005-05-28
  • 打赏
  • 举报
回复
Select * from StudentAchievement A
Where Not Exists(Select 1 from StudentAchievement Where CourseID=A.CourseID And Achievement>A.Achievement Having Count(*)>1)
Order by CourseID,Achievement Desc
lsxaa 2005-05-28
  • 打赏
  • 举报
回复
哈哈 做作业到这上面来问不错的
lsxaa 2005-05-28
  • 打赏
  • 举报
回复
select *
from StudentAchievement a
where (select count(*) from (select CourseID, Achievement from StudentAchievement group by CourseID, Achievement ) b where b.CourseID=a.CourseID and b.Achievement>=a.Achievement)<3
zjcxc 元老 2005-05-28
  • 打赏
  • 举报
回复
这个问题问了N次? 作业?

34,590

社区成员

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

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