一道SQL查询练习题答案解惑

按平均成绩从低到高显示所有学生的“语文”、“数学”、“英语”三门的课程成绩,按如下形式显示:学生ID,语文,数学,英语,有效课程数,有效平均分数据库结构如图。练习题答案我... 按平均成绩从低到高显示所有学生的“语文”、“数学”、“英语”三门的课程成绩,按如下形式显示: 学生ID,语文,数学,英语,有效课程数,有效平均分数据库结构如图。练习题答案我有,我知道有没有另外的办法,答案中我有些疑惑。因为需要查询到语文、数学、英语的成绩但是答案中只是用了一张表。试题答案是 select a.s# '学号', (select score from sc where s#=a.s# and c#=001) '语文', (select score from sc where s#=a.s# and c#=002) '数学', (select score from sc where s#=a.s# and c#=003) '英语', COUNT(a.c#) '有效课程数',AVG(a.score) '有效平均分'from sc agroup by a.s#order by AVG(a.score) desc可以看到语数外三列 中 都是用的c#=数字编号的方式。 如果是from 2个表 sc和course的话会提示错误。而且里面还有个s#=a.s# 为什么把这个也做下条件呢?谢谢大神们解惑,sql初学者致谢 展开
 我来答
badkano
2017-07-19 · 知道合伙人体育行家
badkano
知道合伙人体育行家
采纳数:144776 获赞数:885374
团长

向TA提问 私信TA
展开全部

先说一下,这个答案特别矮穷矬。无论从效率上还是从写法上。

用这个答案能比较标准点

select s# 学号,
sum(case when c#=1 then score else 0 end) 语文,
sum(case when c#=2 then score else 0 end) 数学,
sum(case when c#=3 then score else 0 end) 英语,
count(c#) 有效课程数,
avg(score) 有效平均 
from sc group by s# 
order by avg(score) desc

你那种写法他无非是关联了一个sc表,可以认为是自关联,用两者的s#作为关联条件,但实际上毫无意义。

你可以理解其中括号里的查询是这个:

select a.score from sc c,sc a where c.s#=a.s# and c.c#=2 and a.c#=c.c#

结果也就是编号1的课程号的成绩列表:

感觉你不用深究,能用最简单的方法写出来的语句才是好语句。

追问
首先非常感谢您的回复,我是自学的sql所以有些东西理解的不到位,有些知识点认知是错误的。这个练习题是网上一个博客的。有些题我也是“知其然不知其所以然”就如这道题吧。我看到答案后看到他括号中的内容能大概理解成是做了个自连接的感觉,但是为啥这样自连接一下就不明白了,我解答时也想不到这样,不过看您说他这样自连接毫无意义,请您解释下为啥没有意义呢?  就在追问的同时我又修改了一下括号中的内容,可以执行。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式