接着训练一

I、sql训练

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

selectt3.t_id,

t3.t_name,avg(t1.s_score) asavg_scorefromscore t1left join course t2 on t1.c_id =t2.c_idleft join teacher t3 on t2.t_id =t3.t_idgroup byt3.t_id,

t3.t_nameorder byavg_scoredesc;

22、查询所有课程的成绩第2名到第3名的学生信息及该课程成绩

这里学习到rank()函数

select * from student t1 join(select s_id,s_score,c_id, (rank() over(partition by c_id order by s_score desc)) as排名from score where 排名 between 2 and 3 ) as t2 on t1.s_id =t2.s_id

23、统计各科成绩各分数段人数:课程编号,课程名称,[100-85],[85-70],[70-60],[0-60]及所占百分比

selectt2.c_id,t2.c_name,

(sum(case when s_score between 85 and 100 then 1 else 0 end)/count(s_score))*100a,

(sum(case when s_score <85 and s_score>70 then 1 else 0 end)/count(s_score))*100b,

(sum(case when s_score between 60 and 70 then 1 else 0 end)/count(s_score))*100c,

(sum(case when s_score between 0 and 60 then 1 else 0 end)/count(s_score))*100dfrom score t1 join course t2 on t1.c_id=t2.c_idgroup by t1.c_id

24、查询学生平均成绩及其名次

select avg(s_score), rank() over(order by avg(s_score)) from score group by s_id

25、查询各科成绩前三名的记录

select *

from(select c_id,s_id,dense_rank() over(partition by c_id order by s_score) as ran fromscore) t1where t1.ran<4

26、查询每门课程被选修的学生数

select c_id,count(s_id) from score group by c_id

27、查询出只有两门课程的全部学生的学号和姓名

select s_id,s_name from student where s_id in(select s_id from score group by s_id having count(s_score) = 2)

28、查询男生、女生人数

select s_sex,count(s_id) from student group by s_sex;

29、查询名字中含有"风"字的学生信息

select * from student where s_name like '%风%'

30、查询同名同性学生名单,并统计同名人数

select s_name,count(s_id) as count_num from student group by s_name having count(s_id)>1

31、查询1990年出生的学生名单

select * from student where s_birth like '1990%'

32、查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列

连续两个条件排序,只需要加个条件即可

select avg(s_score) from score group by c_id order by avg(s_score) desc,c_id asc;

33、查询平均成绩大于等于85的所有学生的学号、姓名和平均成绩

select t1.s_id,t1.s_name,avg(t2.s_score) as avg_score from student t1 join score t2 on t1.s_id=t2.s_id group by t1.s_id having avg_score >=85

34、查询课程名称为"数学",且分数低于60的学生姓名和分数

select t1.s_name,t2.s_score from student t1 join score t2 on t1.s_id =t2.s_id join course t3 on t2.c_id =t3.c_id where t3.c_name='数学' and t2.s_score <60

35、查询所有学生的课程及分数情况;

select t1.s_id,t2.s_score as 语文,t3.s_score as 数学, t4.s_score as 英语,(select sum(s_score) from score group by s_id having s_id=t1.s_id) as总分fromstudent t1

left join score t2 on t1.s_id=t2.s_id and t2.c_id='01'left join score t3 on t1.s_id=t3.s_id and t3.c_id='02'left join score t4 on t1.s_id=t4.s_id and t4.c_id='03'

36、查询任何一门课程成绩在70分以上的姓名、课程名称和分数

select t3.s_name,t2.c_name,t1.s_score from score t1 join course t2 on t1.c_id=t2.c_id join student t3 on t1.s_id = t3.s_id where s_score >70

37、查询不及格的课程

select * from course t1 join score t2 on t1.c_id=t2.c_id where t2.s_score < 60

38、查询课程编号为01且课程成绩在80分以上的学生的学号和姓名;

select t2.s_id,t2.s_name from score t1 join student t2 on t1.s_id=t2.s_id where t1.c_id='01' and t1.s_score>80

39、求每门课程的学生人数

select c_id,count(s_id) from score group by c_id

40、查询选修"张三"老师所授课程的学生中,成绩最高的学生信息及其成绩

select * from(select t1.*,t2.s_score,rank() over(order by t2.s_score desc) ranfrom student t1 join score t2 on t1.s_id=t2.s_idwhere t2.c_id in (select c_id from course natural join teacher where t_name = '张三')

) tawhere ta.ran =1

II、总结一下

1、前面二十道会了之后,后面几乎没有什么难度,主要在于思路,已经尽量减少多表关联,增加查询速度

2、开窗函数,这是mysql新特性,可以添加rank等,解决排序等问题

mysql查询不同老师所教不同课程_mysql学习训练记录及笔记(二)相关推荐

  1. mysql查询不同老师所教不同课程_mysql数据库面试题(学生表_课程表_成绩表_教师表)...

    Student(Sid,Sname,Sage,Ssex)学生表 Sid:学号 Sname:学生姓名 Sage:学生年龄 Ssex:学生性别 Course(Cid,Cname,Tid)课程表 Cid:课 ...

  2. mysql查询不同老师所教不同课程_MySQL学生表、老师表、课程表和成绩表查询语句,全部亲测...

    建表可自行百度,重点为查询: 一.数据准备: 1.student学生表数据: 2.teacher老师表数据: 3.course课程表数据: 4.score成绩表数据: 二.数据查询 1.查询平均成绩大 ...

  3. 21 、查询不同老师所教不同课程平均分从高到低显示(不重点)(自己做出)

    -- 21 .查询不同老师所教不同课程平均分从高到低显示(不重点) SELECT b.t_id,b.t_name,a.c_name,a.c_id,AVG(c.s_score)'mean' FROM c ...

  4. 查询不同老师所教不同课程平均分从高到低显示

    建表语句点击详见 – 查询不同老师所教不同课程平均分从高到低显示 SELECT t.t_id, t.t_name, c.c_name, AVG(sc.s_score) FROM teacher t L ...

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

    SELECT t.t_id,t.t_name,c.c_name,AVG(sc.s_score) FROM teacher t LEFT JOIN course c ON c.t_id=t.t_id L ...

  6. mysql查询所有男生中姓王的_MySQL的查询练习

    student表 teacher表 course表 score表 对这四个表进行一些练习. 1:查询student表中所有记录. select *from student; 2:查询student表中 ...

  7. mysql查询学生所选修的全部课程_查询选修了全部课程的学生姓名

    首先头脑中有三点概念: 1 .  EXISTS 子查询找到的提交 NOT EXISTS 子查询中 找不到的提交 说明:不要去翻译为存在和不存在,把脑袋搞晕. 2 . 建立程序循环的概念,这是一个动态的 ...

  8. MySql 查询某某老师教授的课名和教室

    有 teacher, student, course, score四个表 -- 查询某某老师教授的课名和教室. SELECT 课名,教室 FROM course WHERE 任课教师编号 = (SEL ...

  9. MySQL 查询学生的总成绩并进行排名_MySQL查询各科成绩前三名的记录及排名(不考虑成绩并列情况)...

    MySQL查询各科成绩前三名的记录及排名(不考虑成绩并列情况) MySQL查询各科成绩前三名的记录及排名(不考虑成绩并列情况) 我的表结构: 先放代码 -- 查询各科成绩前三名的记录(不考虑成绩并列情 ...

最新文章

  1. 微软与联合国环境规划署联手解决环境问题
  2. 4.3 核对矩阵的维数-深度学习-Stanford吴恩达教授
  3. Jedis干什么用的
  4. mysql对其他IP授权访问
  5. Ubuntu 16.04 Spark单机环境搭建
  6. Altium designer中导入CAD文件
  7. MySQL两千万数据优化迁移
  8. 智能算法浅介----模拟退火,遗传算法,禁忌搜索,神经网络等
  9. Cesium - 地形瓦片(Quantized-mesh)
  10. 计算机仿真matlab编程,MATLAB与计算机仿真
  11. 记2021上半年软考中级-数据库系统工程师考试
  12. centos 替换阿里源
  13. ROS中使用RPLIDAR激光雷达
  14. 量子计算进阶:量子计算机的组建和量子计算原理(包含相关论文推荐60篇)
  15. FME 2017.0 的新特性(预览版发布)
  16. python有vlookup的功能么_Python 3中的条件vlookup
  17. 成功鲜有偶然:一览IT名人的教育成长经历
  18. 证件照制作:使用PS打印一寸照片
  19. 万字详解用户行为分析
  20. 信息学奥赛一本通(C++版)第一部分 C++语言 第五章 数组

热门文章

  1. fcn网络结构代码_FCN实现2-模型结构及实现
  2. 跨域问题的简单解决办法
  3. Spark SQL之jdbc方式访问
  4. 自然语言处理之长短时记忆网络(六)
  5. 太恐怖了,Linux服务器感染了kerberods病毒...
  6. 张雪峰计算机科学与技术学什么,张雪峰看好的三大专业是什么 前景好的专业...
  7. java动态规划算阶乘_动态规划算法
  8. linux 全局搜索文件_Linux笔记之文件搜索1
  9. java数组的几种形式——java编程思想01
  10. Python学习---Django的request扩展[获取用户设备信息]