Mysql练习(三)

-- 18.查询各科成绩最高分、最低分和平均分:以如下形式显示:课程ID,课程name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率
-- 及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90

SELECT c.*,MAX(s.`s_score`),MIN(s.`s_score`),ROUND(AVG(s.`s_score`),2)AS 平均成绩,
ROUND(100*(SUM(CASE WHEN s.s_score >= 60 THEN 1 ELSE 0 END ))/COUNT(1),2) AS 及格率,
ROUND(100*(SUM(CASE WHEN s.s_score BETWEEN 70 AND 80 THEN 1 ELSE 0 END ))/COUNT(1),2) 中等,
ROUND(100*(SUM(CASE WHEN s.s_score BETWEEN 80 AND 90 THEN 1 ELSE 0 END ))/COUNT(1),2) AS 优良,
ROUND(100*(SUM(CASE WHEN s.s_score >= 90 THEN 1 ELSE 0 END ))/COUNT(1),2) AS 优秀
FROM score s INNER JOIN course c ON s.`c_id` = c.`c_id` GROUP BY s.`c_id`;

-- 19、按各科成绩进行排序,并显示排名
-- mysql没有rank函数

SELECT t.*,@a:=@a+1 AS 排名 FROM (SELECT * FROM score s GROUP BY s_id,c_id,s_score ORDER BY s.`s_score` DESC) t,(SELECT @a:=0) a;

-- 20、查询学生的总成绩并进行排名

SELECT * FROM student stu ,(SELECT s_id,SUM(s_score)总分 FROM score GROUP BY s_id ORDER BY 总分 DESC) AS tmp WHERE stu.s_id = tmp.s_id;

-- 21、查询不同老师所教不同课程平均分从高到低显示

SELECT t.`t_name`,c.`c_name`,ROUND(AVG(s_score),2) 各科平均成绩 FROM score s INNER JOIN course c ON c.`c_id` = s.`c_id` 
INNER JOIN teacher t ON t.`t_id` = c.`c_id` GROUP BY c.`c_id` ORDER BY 各科平均成绩 DESC
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 我使用的Mysql版本是5.7.19。答案可能会因版本会有少许出入。如果答案有问题欢迎在评论区指出并给出你的答案。...
    大石兄阅读 18,227评论 8 22
  • 网上流传较广的50道SQL训练,奋斗了不知道多久终于写完了。前18道题的难度依次递增,从19题开始的后半部分算是循...
    Kaidi_G阅读 481,992评论 312 453
  • 50道SQL练习题及答案与详细分析 https://www.jianshu.com/p/cc23c19ef639[...
    将代码写成诗阅读 2,379评论 0 3
  • 数据表介绍 --1.学生表 Student(SId, Sname, Sage, Ssex)SId 学生编号, Sn...
    ZachXu阅读 2,910评论 0 2
  • 文/金刚葫芦妈 最近把军师联盟看完了,据说这部历史大剧的收视率并不是很高,但对于我来说,这种剧百看不厌。 以前一直...
    兰菲阅读 1,350评论 6 7

友情链接更多精彩内容