diff --git "a/7 \345\273\226\346\262\273\345\205\210/\344\275\234\344\270\232/2022-9-21\344\275\234\344\270\232.sql" "b/7 \345\273\226\346\262\273\345\205\210/\344\275\234\344\270\232/2022-9-21\344\275\234\344\270\232.sql" new file mode 100644 index 0000000000000000000000000000000000000000..ab5e3c67c39ab9e9155e92b716d8d3e486479c2f --- /dev/null +++ "b/7 \345\273\226\346\262\273\345\205\210/\344\275\234\344\270\232/2022-9-21\344\275\234\344\270\232.sql" @@ -0,0 +1,57 @@ +--13. 按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩 + --1. + select sc.sid,max(case when cid=01 then score end)'01', + max(case when cid=02 then score end)'02', + max(case when cid=03 then score end)'03', + avg(score)平均成绩 + from sc + group by sid + order by AVG(score) desc + ; + --2. + select sid,(select sid from sc sc1 where sc1.CId=01 and sc1.sid=sc.sid )'01', + (select score from sc sc1 where sc1.CId=02 and sc1.sid=sc.sid )'02', + (select score from sc sc1 where sc1.CId=03 and sc1.sid=sc.sid )'03', + avg(score)平均成绩 + from sc + group by sid + order by AVG(score) desc; +--14. 查询各科成绩最高分、最低分和平均分: + +--以如下形式显示:课程 ID,课程 name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率 + +--及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90 + +--要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列 + select cid,count(*)选修人数,max(score)最高分,min(score)最低分,avg(score)平均分, + (select cname from Course c where c.CId=sc.CId)学科, + concat(count((case when score>=60 then '及格' end))*100/count(*),'%')及格, + concat(count((case when score>=70 and score<80 then '中等' end))*100/count(*),'%')中等, + concat(count((case when score>=80 and score<90 then '优良' end))*100/count(*),'%')优良, + concat(count((case when score>=90 then '优秀' end))*100/count(*),'%')优秀 + from sc + group by cid + order by count(*),cid + ; +--15. 按各科成绩进行排序,并显示排名, Score 重复时保留名次空缺 + select *,RANK() over(partition by cid order by score desc) from sc; +--15.1 按各科成绩进行排序,并显示排名, Score 重复时合并名次 + select *,DENSE_RANK() over(partition by cid order by score desc) from sc; +--16. 查询学生的总成绩,并进行排名,总分重复时保留名次空缺 + select sid,sum(score),RANK() over(order by sum(score)desc) from sc + group by sid + ; +--16.1 查询学生的总成绩,并进行排名,总分重复时不保留名次空缺 + select sid,sum(score),DENSE_RANK() over(order by sum(score)desc) from sc + group by sid + ; +--17. 统计各科成绩各分数段人数:课程编号,课程名称,[100-85],[85-70],[70-60],[60-0] 及所占百分比 + select cid, + (select cname from Course c where c.CId=sc.CId)学科, + concat(count((case when score>=60 then '及格' end))*100/count(*),'%')[100-85], + concat(count((case when score>=70 and score<80 then '中等' end))*100/count(*),'%')[85-70], + concat(count((case when score>=80 and score<90 then '优良' end))*100/count(*),'%')[70-60], + concat(count((case when score>=90 then '优秀' end))*100/count(*),'%')[60-0] + from sc + group by sc.cid + order by count(*),sc.cid; \ No newline at end of file diff --git "a/7 \345\273\226\346\262\273\345\205\210/\347\254\224\350\256\260/2022-9-21\347\254\224\350\256\260.md" "b/7 \345\273\226\346\262\273\345\205\210/\347\254\224\350\256\260/2022-9-21\347\254\224\350\256\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..6be4ef13e0ba5306d0c7af922ccf79dae3fcdc7a --- /dev/null +++ "b/7 \345\273\226\346\262\273\345\205\210/\347\254\224\350\256\260/2022-9-21\347\254\224\350\256\260.md" @@ -0,0 +1,26 @@ +select * from tb_student + +--鏌ヨ骞撮緞鏈澶х殑瀛︾敓淇℃伅锛岃姹傛樉绀猴細濮撳悕锛屾у埆锛屽勾榫 +select birth,name 濮撳悕,gender 鎬у埆 from tb_student +where birth = (select min(birth) from tb_student) + +--鎺掑簭鍑芥暟 +select birth,濮撳悕,鎬у埆 from ( +select birth,name 濮撳悕,gender 鎬у埆,row_number() over (order by birth ) as birth_rank from tb_student +) as T1 +where T1.birth_rank = 1 + +--鏌ヨ鐢风敓鍜屽コ鐢熶腑骞撮緞鏈澶х殑瀛︾敓淇℃伅锛岃姹傛樉绀猴細濮撳悕锛屾у埆锛屽勾榫 +--闈炲叧鑱斿瓙鏌ヨ +select birth,name 濮撳悕,gender 鎬у埆 from tb_student +where birth in (select min(birth) from tb_student group by gender) + +--鍏宠仈瀛愭煡璇細鍐呴儴鏌ヨ闇瑕佸紩鐢ㄥ閮ㄨ〃宸叉煡璇㈠嚭鐨勪俊鎭 +select birth,name 濮撳悕,gender 鎬у埆 from tb_student t1 +where birth = (select min(birth) from tb_student t2 where t2.gender=t1.gender) + +--绐楀彛鍑芥暟锛氭帓搴 +select birth,濮撳悕,鎬у埆 from ( +select birth,name 濮撳悕,gender 鎬у埆,row_number() over (partition by gender order by birth ) as birth_rank from tb_student +) as T1 +where T1.birth_rank = 1