求助sql server中查询各课程平均成绩最高的学生的姓名、学号和成绩

weixin_39073413 2018-04-11 01:08:35

我的三个表都在这儿了
select Student.学号,姓名,SC.成绩,avg(成绩) as 平均分
from Student,SC
where Student.学号 =SC.学号
group by Student.学号,姓名,SC.成绩
having avg(成绩) >= all (select avg(成绩))
这是我写的代码,但运行出来是这样,并不是要求里显示的平均分最高的学生信息
哪位大佬能帮我看看这个小问题啊,实在想不出来啊
...全文
6417 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
飞花舞者 2020-08-29
  • 打赏
  • 举报
回复
可以先求出平均分来后降序排序,再取第一行
棥楃 2019-10-27
  • 打赏
  • 举报
回复 1
HAVING AVG(成绩) >= ALL(SELECT AVG(成绩) FROM 选课表 GROUP BY 学号)
warcraftmgq 2018-04-12
  • 打赏
  • 举报
回复
楼主这个描述有问题,各课程平均成绩最高,没这种说法啊!
紫菜蛋花 2018-04-12
  • 打赏
  • 举报
回复
楼主可以再把过程描述清晰点
weixin_39073413 2018-04-11
  • 打赏
  • 举报
回复
引用 10 楼 yenange 的回复:
平均最高 两者是矛盾的。 楼主如果不好表达, 那就直接把 完全正确的结果 写出来, 也方便人家帮你想吧。
就是这问题啊,就是把学生各课程成绩的平均分中查询出最高平均分的那个学生的姓名,学号
weixin_39073413 2018-04-11
  • 打赏
  • 举报
回复 1
引用 7 楼 neal114 的回复:
[quote=引用 2 楼 wmxcn2000 的回复:]
select Student.学号,姓名,SC.成绩,avg(成绩) as 平均分
from Student,SC
where Student.学号 =SC.学号
group by Student.学号,姓名,SC.成绩
having avg(成绩) >= all (select avg(成绩) from SC group by 学号)


SC.成绩,avg(成绩) as 平均分 这两个值应该是相等的吧。。。[/quote]

看了你的回复我把SC.成绩去了,成功显示平均分最高的学生
还有个问题就是这个结果是以平均分最高的成绩显示学生信息,如果要同时显示这个学生的各课程的成绩呢?
打个比方,我新增一条记录学号009选了课程号2的成绩为84,那学号009的陈华就选了两门,平均分最高还是009,但要在结果集里同时显示他的各课程成绩怎么办呢?
吉普赛的歌 2018-04-11
  • 打赏
  • 举报
回复
平均最高 两者是矛盾的。 楼主如果不好表达, 那就直接把 完全正确的结果 写出来, 也方便人家帮你想吧。
weixin_39073413 2018-04-11
  • 打赏
  • 举报
回复
引用 2 楼 wmxcn2000 的回复:
select Student.学号,姓名,SC.成绩,avg(成绩) as 平均分
from Student,SC
where Student.学号 =SC.学号
group by Student.学号,姓名,SC.成绩
having avg(成绩) >= all (select avg(成绩) from SC group by 学号)

这段代码运行结果这样
结果中是显示学生中平均分最高的了,但还有个学号004的学生得分90是怎么回事啊,他这个90分是单课程的得分啊,而且最后结果如果没有重复行的话肯定只有一个平均分最高分啊
Kongdom12138 2018-04-11
  • 打赏
  • 举报
回复
引用 2 楼 wmxcn2000 的回复:
select Student.学号,姓名,SC.成绩,avg(成绩) as 平均分 from Student,SC where Student.学号 =SC.学号 group by Student.学号,姓名,SC.成绩 having avg(成绩) >= all (select avg(成绩) from SC group by 学号)
SC.成绩,avg(成绩) as 平均分 这两个值应该是相等的吧。。。
Kongdom12138 2018-04-11
  • 打赏
  • 举报
回复
引用 4 楼 wj901470 的回复:
select Student.学号,姓名,avg(成绩) as 平均分 from Student,SC where Student.学号 =SC.学号 group by Student.学号,姓名 having avg(成绩) =max(avg(成绩))
执行报错呀 消息 130,级别 15,状态 1,第 5 行 不能对包含聚合或子查询的表达式执行聚合函数。
Kongdom12138 2018-04-11
  • 打赏
  • 举报
回复
各课程平均成绩最高的学生,这个不是很明白。。。看代码应该是各课程高于平均成绩的学生
SELECT
SC.学号,Student.姓名,成绩,t.平均成绩
FROM SC
LEFT JOIN Student ON Student.学号 = SC.学号
LEFT JOIN (
SELECT
SC.课程号,AVG(成绩) 平均成绩
FROM SC
GROUP BY SC.课程号
) t ON t.课程号 = SC.课程号
WHERE SC.成绩 > t.平均成绩
wj901470 2018-04-11
  • 打赏
  • 举报
回复
select Student.学号,姓名,avg(成绩) as 平均分 from Student,SC where Student.学号 =SC.学号 group by Student.学号,姓名 having avg(成绩) =max(avg(成绩))
wj901470 2018-04-11
  • 打赏
  • 举报
回复
group by 后面也只需要保留 Student.学号,姓名
卖水果的net 2018-04-11
  • 打赏
  • 举报
回复
select Student.学号,姓名,SC.成绩,avg(成绩) as 平均分 from Student,SC where Student.学号 =SC.学号 group by Student.学号,姓名,SC.成绩 having avg(成绩) >= all (select avg(成绩) from SC group by 学号)
wj901470 2018-04-11
  • 打赏
  • 举报
回复
最后一个条件改一下 having avg(成绩)=max(avg(成绩))
wj901470 2018-04-11
  • 打赏
  • 举报
回复
sql中没有判断是否每个学生都有3门课的成绩,如果缺考也要录入一个0分的成绩
wj901470 2018-04-11
  • 打赏
  • 举报
回复
用这个语句能查出来平均分最高的学生学号:select 学号 from SC  group by  学号 having  avg(成绩) >= all (select avg(成绩) from sc group by 学号) 再关联查一下这个学生的成绩:select Student.学号,姓名,SC.课程,SC.成绩 from Student,SC where Student.学号 =SC.学号 and SC.学号=(select 学号 from SC  group by  学号 having  avg(成绩) >= all (select avg(成绩) from sc group by 学号)) 如果要求也显示平均成绩:select Student.学号,姓名,SC.课程,SC.成绩,tmpsc.平均成绩 from Student,SC,(select 学号,avg(成绩) 平均成绩 from SC  group by  学号 having  avg(成绩) >= all (select avg(成绩) from sc group by 学号) ) tmpsc where Student.学号 =SC.学号 and SC.学号=tmpsc.学号
吉普赛的歌 2018-04-11
  • 打赏
  • 举报
回复
引用 13 楼 weixin_39073413 的回复:
[quote=引用 12 楼 yenange 的回复:] [quote=引用 11 楼 weixin_39073413 的回复:] [quote=引用 10 楼 yenange 的回复:] 平均最高 两者是矛盾的。 楼主如果不好表达, 那就直接把 完全正确的结果 写出来, 也方便人家帮你想吧。
就是这问题啊,就是把学生各课程成绩的平均分中查询出最高平均分的那个学生的姓名,学号[/quote] 你列出最终的正确结果吧[/quote] 学号 姓名 成绩 平均分 009 陈华 88 88 想以这种结果显示,我现在只显示学号 姓名 平均分。 课程成绩我搞不出来[/quote] 不仅是格式, 要最终的所有的正确结果。 你把最终结果能列出来, 思路才清晰
weixin_39073413 2018-04-11
  • 打赏
  • 举报
回复
引用 12 楼 yenange 的回复:
[quote=引用 11 楼 weixin_39073413 的回复:] [quote=引用 10 楼 yenange 的回复:] 平均最高 两者是矛盾的。 楼主如果不好表达, 那就直接把 完全正确的结果 写出来, 也方便人家帮你想吧。
就是这问题啊,就是把学生各课程成绩的平均分中查询出最高平均分的那个学生的姓名,学号[/quote] 你列出最终的正确结果吧[/quote] 学号 姓名 成绩 平均分 009 陈华 88 88 想以这种结果显示,我现在只显示学号 姓名 平均分。 课程成绩我搞不出来
吉普赛的歌 2018-04-11
  • 打赏
  • 举报
回复
引用 11 楼 weixin_39073413 的回复:
[quote=引用 10 楼 yenange 的回复:] 平均最高 两者是矛盾的。 楼主如果不好表达, 那就直接把 完全正确的结果 写出来, 也方便人家帮你想吧。
就是这问题啊,就是把学生各课程成绩的平均分中查询出最高平均分的那个学生的姓名,学号[/quote] 你列出最终的正确结果吧

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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