diff --git "a/13\345\217\267\351\203\221\346\226\207\346\272\220/\344\275\234\344\270\232/9.21\344\275\234\344\270\232.sql" "b/13\345\217\267\351\203\221\346\226\207\346\272\220/\344\275\234\344\270\232/9.21\344\275\234\344\270\232.sql" new file mode 100644 index 0000000000000000000000000000000000000000..f23bc5b13918e7e4deb41419d971969b056c69af --- /dev/null +++ "b/13\345\217\267\351\203\221\346\226\207\346\272\220/\344\275\234\344\270\232/9.21\344\275\234\344\270\232.sql" @@ -0,0 +1,41 @@ + +select * from Student; +select * from Course; +select * from Teacher; + +--13. 按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩 + + +select a.sid,a.平均成绩,b.score from(select sid,score from sc) as b +left join (select sid,SUM(score)/3 as 平均成绩 from SC +group by sid +) as a on a.SId=b.SId +order by a.平均成绩 desc + + +--14. 查询各科成绩最高分、最低分和平均分: +--以如下形式显示:课程 ID,课程 name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率 +--及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90 +--要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列 +select a.CId,Cname, +count(distinct b.SId) as 选修人数, +max(b.score), +min(b.score), +avg(b.score), +CONCAT(FLOOR(SUM(case when b.score>60 then 1 else 0 end)/1.0*100/count(distinct b.SId)),'%') as '及格率', +CONCAT(FLOOR(SUM(case when b.score>=70 and b.score<80 then 1 else 0 end)/1.0*100/count(distinct b.SId)),'%') as '中等率', +CONCAT(FLOOR(SUM(case when b.score>=90 then 1 else 0 end)/1.0*100/count(distinct b.SId)),'%')as'优秀率', +CONCAT(FLOOR(sum(case when b.score>=80 and b.score<90 then 1 else 0 end)/1.0*100/count(distinct b.SId)),'%') as '优良率' +from Course as a left join sc as b on a.CId=b.CId +group by a.CId,a.Cname +order by 选修人数 DESC,a.CId + +--15. 按各科成绩进行排序,并显示排名, Score 重复时保留名次空缺 +select rank() over (partition by cid order by score desc) as 排名,cid,score from SC; + +--15.1 按各科成绩进行排序,并显示排名, Score 重复时合并名次 +select DENSE_RANK() over (partition by cid order by score desc) as 排名,cid,score from SC; +--16. 查询学生的总成绩,并进行排名,总分重复时保留名次空缺 +select rank() over (order by sum(score) desc) as 排名,sid,sum(score) from SC group by sid +--16.1 查询学生的总成绩,并进行排名,总分重复时不保留名次空缺 +select DENSE_RANK() over (order by sum(score) desc) as 排名,sid,sum(score) from SC group by sid \ No newline at end of file diff --git "a/13\345\217\267\351\203\221\346\226\207\346\272\220/\347\254\224\350\256\260/9.21\347\254\224\350\256\260.txt" "b/13\345\217\267\351\203\221\346\226\207\346\272\220/\347\254\224\350\256\260/9.21\347\254\224\350\256\260.txt" new file mode 100644 index 0000000000000000000000000000000000000000..a0d3aa6943c72d44a88fb0009813df6b23a8d379 --- /dev/null +++ "b/13\345\217\267\351\203\221\346\226\207\346\272\220/\347\254\224\350\256\260/9.21\347\254\224\350\256\260.txt" @@ -0,0 +1,34 @@ +瀛愭煡璇㈢殑鐗圭偣鍜屼紭鍔 +1锛変娇鐢ㄧ伒娲汇 + +鍙互鎴愪负SQL 璇彞鐨勫涓儴鍒嗐 +瀛愭煡璇綔涓烘煡璇㈡潯浠朵娇鐢ㄣ +瀛愭煡璇綔涓轰复鏃惰〃浣跨敤銆 from () +瀛愭煡璇綔涓哄垪浣跨敤銆 +2锛夐檷浣嶴QL 鐨勮鍙ョ殑澶嶆潅搴︼紝鎻愰珮SQL 璇彞鐨勫彲璇绘с +鏍囬噺瀛愭煡璇 锛 +閫氬父鍙互浣跨敤杩炴帴鏌ヨ鏇夸唬 + +鏍囬噺瀛愭煡璇㈡槸鎸囧瓙鏌ヨ杩斿洖鐨勬槸鍗曚竴鍊硷紝濡備竴涓暟瀛楁垨涓涓瓧绗︿覆銆 +鍒楀瓙鏌ヨ +鍒楀瓙鏌ヨ鏄寚瀛愭煡璇㈣繑鍥炵殑缁撴灉闆嗘槸N琛1鍒楋紝璇ョ粨鏋滈氬父鏉ヨ嚜瀵硅〃鏌愪釜瀛楁鐨勬煡璇㈢粨鏋滐紝 +甯n鍏抽敭瀛楃殑瀛愭煡璇㈡槸鏈甯哥敤鐨勪竴绫诲瓙鏌ヨ锛屽湪浣跨敤in鍏抽敭瀛楄繘琛屾煡璇㈡椂锛 +瀛愭煡璇㈣鍙ヨ繑鍥炵殑缁撴灉搴旇鏄竴涓暟鎹垪涓殑澶氫釜鍊硷紝濡傛灉浠呰繑鍥1涓暟鍊硷紝鍒欏彲鐢ㄦ爣閲忓瓙鏌ヨ浠f浛銆 +琛屽瓙鏌ヨ +琛屽瓙鏌ヨ鏄寚瀛愭煡璇㈣繑鍥炵殑缁撴灉闆嗘槸1琛孨鍒楋紝璇ュ瓙鏌ヨ鐨勭粨鏋滈氬父鏄琛ㄧ殑鏌愯鏁版嵁杩涜鏌ヨ鑰岃繑鍥炵殑缁撴灉闆嗐 +琛ㄥ瓙鏌ヨ(from瀛愭煡璇) +琛ㄥ瓙鏌ヨ鏄寚瀛愭煡璇㈣繑鍥炴槸M琛孨鍒楃殑缁撴灉闆嗭紝鏌ヨ璇彞鍙祵濂楀湪FROM鍏 閿瓧鍚庯紝涓旈渶瑕佸畾涔夊埆鍚嶃 +鎸変綅缃垎绫 +exists瀛愭煡璇 +鍏抽敭瀛桬XISTS鏋勯犲瓙鏌ヨ鏃讹紝褰撳瓙鏌ヨ鐨勭粨鏋滈泦涓嶄负绌烘椂锛屽垯EXISTS杩斿洖鐨勭粨鏋滀负TRUE锛 +澶栧眰鏌ヨ璇彞杩涜鏌ヨ锛涘綋瀛愭煡璇㈢殑缁撴灉闆嗕负绌烘椂锛屽垯EXISTS杩斿洖鐨勭粨鏋滀负FALSE锛屽灞傛煡璇㈣鍙ヤ笉杩涜鏌ヨ銆 +鎺掑簭鍑芥暟 +鎺掑簭鍑芥暟 OVER( [鍒嗙粍瀛愬彞] 鎺掑簭瀛愬彞[DESC][ASC] ) + +鎺掑簭瀛愬彞 锛歄RDER BY 鎺掑簭鍒,鎺掑簭鍒椻 + +缁冧範:浣跨敤鍚勪釜鎺掑悕鍑芥暟瀵瑰鍛樼殑Java 鎴愮哗杩涜鎺掑悕锛屽苟浠旂粏浣撲細鍏朵腑鎺掑簭鍑芥暟鐨勫叿浣撶敤娉曚笌鍏朵腑鐨勫尯鍒 + +ROW_NUMBER()鍑芥暟鐢熸垚鐨勬帓搴忔牴鎹帓搴忓瓙鍙ョ粰鍑洪掑杩炵画鐨勫簭鍙 +RANK()鍑芥暟鐢熸垚鐨勬帓搴忔牴鎹帓搴忓瓙鍙ョ粰鍑洪掑鐨勫簭鍙凤紝浣嗘槸瀛樺湪骞跺垪骞朵笖璺崇┖ +DENSE_RANK() 鍑芥暟鐢熸垚鐨勬帓搴忔牴鎹帓搴忓瓙鍙ョ粰鍑洪掑鐨勫簭鍙凤紝浣嗘槸瀛樺湪骞跺垪涓嶈烦绌 \ No newline at end of file