这道题其实也很简单,我把数据弄到数据库里调试了好一会才做出来的
用到了前面一道题学到的通过select自己创建一个表拿来用的方法。
然后我一开始把课程号误以为是SId,卡了好久。
这道题其实不需要course表,因为题目要的是课程号和对应的该课程的平均分和及格率。
另外要注意 排序规则是 按照及格百分率从高到低再按照平均分从低到高排序的。
我首先用select语句创建了一个辅助表,为的是把一个课程的及格的人数和该课程总人数求出来,用于最外层计算及格百分率。其中还查了CId是为了把自己创建的t表和sc表通过连起来。
这里我测试了自己创建的t表,可以正确查出每个课程的及格人数和总人数。
然后我们把t表拿到来用,通过 (t.jihe / t.num)*100获得及格百分数。
注意最后的排序
即可
代码:
select sc.CId 课程号,avg(score) 平均成绩,(t.jige/t.num)*100 及格百分数
from sc,(
select CId,count(case when score>=60 then 1 end) jige,count(*) num
from sc
group by CId
) t
where t.CId = sc.CId
group by t.CId
order by 及格百分数 desc,平均成绩