mysql查询不同老师所教不同课程_mysql学习训练记录及笔记(二)
接著訓(xùn)練一
I、sql訓(xùn)練
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名的學(xué)生信息及該課程成績
這里學(xué)習(xí)到rank()函數(shù)
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、統(tǒng)計各科成績各分?jǐn)?shù)段人數(shù):課程編號,課程名稱,[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、查詢學(xué)生平均成績及其名次
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、查詢每門課程被選修的學(xué)生數(shù)
select c_id,count(s_id) from score group by c_id
27、查詢出只有兩門課程的全部學(xué)生的學(xué)號和姓名
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、查詢男生、女生人數(shù)
select s_sex,count(s_id) from student group by s_sex;
29、查詢名字中含有"風(fēng)"字的學(xué)生信息
select * from student where s_name like '%風(fēng)%'
30、查詢同名同性學(xué)生名單,并統(tǒng)計同名人數(shù)
select s_name,count(s_id) as count_num from student group by s_name having count(s_id)>1
31、查詢1990年出生的學(xué)生名單
select * from student where s_birth like '1990%'
32、查詢每門課程的平均成績,結(jié)果按平均成績降序排列,平均成績相同時,按課程編號升序排列
連續(xù)兩個條件排序,只需要加個條件即可
select avg(s_score) from score group by c_id order by avg(s_score) desc,c_id asc;
33、查詢平均成績大于等于85的所有學(xué)生的學(xué)號、姓名和平均成績
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、查詢課程名稱為"數(shù)學(xué)",且分?jǐn)?shù)低于60的學(xué)生姓名和分?jǐn)?shù)
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='數(shù)學(xué)' and t2.s_score <60
35、查詢所有學(xué)生的課程及分?jǐn)?shù)情況;
select t1.s_id,t2.s_score as 語文,t3.s_score as 數(shù)學(xué), 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、查詢?nèi)魏我婚T課程成績在70分以上的姓名、課程名稱和分?jǐn)?shù)
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分以上的學(xué)生的學(xué)號和姓名;
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、求每門課程的學(xué)生人數(shù)
select c_id,count(s_id) from score group by c_id
40、查詢選修"張三"老師所授課程的學(xué)生中,成績最高的學(xué)生信息及其成績
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、總結(jié)一下
1、前面二十道會了之后,后面幾乎沒有什么難度,主要在于思路,已經(jīng)盡量減少多表關(guān)聯(lián),增加查詢速度
2、開窗函數(shù),這是mysql新特性,可以添加rank等,解決排序等問題
總結(jié)
以上是生活随笔為你收集整理的mysql查询不同老师所教不同课程_mysql学习训练记录及笔记(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: httpcline转发_如何实现Http
- 下一篇: mysql数据库恢复数据_【技术分享】使