日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

sql 百分数_SQL经典50题笔记

發布時間:2023/12/4 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sql 百分数_SQL经典50题笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SQL語句執行順序

(8) SELECT (9)DISTINCT<Select_list> (1) FROM <left_table> (3) <join_type>JOIN<right_table> (2) ON<join_condition> (4) WHERE<where_condition> (5) GROUP BY<group_by_list> (6) WITH {CUBE|ROLLUP} (7) HAVING<having_condtion> (10) ORDER BY<order_by_list> (11) LIMIT<limit_number>

9、查詢所有課程成績小于60分的同學的學號、姓名;成績最大的小于60分,所以就是所有成績小于60分

select t1.sid,sname from (select sid,max(score) from SC group by sid having max(score)<60)as t1 left join student on t1.sid=student.sid

10、查詢沒有學全所有課的同學的學號、姓名;

select a.sid,sname from (select sid,count(cid) from SC group by sid having count(cid)<(select count(cid) from course))as a left join student on a.sid=student.sid;

11、查詢至少有一門課與學號為“01”的同學所學相同的同學的學號和姓名;

select sid,sname from Student where sid in (select distinct sid #查詢學生學號sid from SC where cid in(select cid from SC where sid='01')) #在成績表中查出學號為01的學生課程 and sid!='01';

12、查詢和"01"號的同學學習的課程完全相同的其他同學的學號和姓名

注:課程完全相同≠課程數相同

注2:在同一次SQL語句中多次引用SC表,要對其進行a、b、c標注

select sid,sname from Student #在student表中查出符合下面條件對應的學號和姓名 where sid in (SELECT sid from (select * #查出所有課中和01重合的課 from SC as a where cid in (select cid from SC where sid='01'))b #01學過的課 group by sid having count(cid)=(select count(cid) FROM SC as c where sid='01')) #按學號分組后篩選出和01的學的課程數相等的學號 and sid!='01' #查出學號姓名后排除掉01本身

13、把“SC”表中“張三”老師教的課的成績都更改為此課程的平均成績;

暫跳過update題目

14、查詢沒學過"張三"老師講授的任一門課程的學生姓名

select sname from Student where sid not in(select distinct sid #not in 不在***里 from SC left join course on SC.cid=course.cid left join teacher on course.tid=teacher.tid where tname='張三')

15、查詢兩門及其以上不及格課程的同學的學號,姓名及其平均成績

select t.sid,sname,avg_score #對子查詢引用 from ( select sid,count(if(score<60,cid,null)),avg(score)as avg_score #這里的自查詢要對平均數avg(score)重命名,因為下一步的查詢要對其引用 from SC group by sid having count(if(score<60,cid,null))>=2 )t left join student on t.sid=student.sid

16、檢索"01"課程分數小于60,按分數降序排列的學生信息

select * from (select student.sid,sname,sage,ssex,cid,score FROM student left join SC on student.sid=SC.sid where cid='01' and score<60)t order by score desc

17、按平均成績從高到低顯示所有學生的平均成績

select sid,avg(score)as avg_score from SC group by sid order by avg_score desc

18、查詢各科成績最高分、最低分和平均分,以如下形式顯示:

以如下形式顯示:課程 ID,課程 name,最高分,最低分,平均分,及格率,中等率,

優良率,優秀率

及格為>=60,中等為:70-80,優良為:80-90,優秀為:>=90

select t.cid,any_value(cname)as 課程名稱,max(score)as 最高分, min(score)as 最低分,avg(score) as 平均分, sum(及格)/count(sid) as 及格率, sum(中等)/count(sid) as 中等率, sum(優良)/count(sid) as 優良率, sum(優秀)/count(sid) as 優秀率 from (select *,case when score>=60 then 1 else 0 end as 及格, case when score>=70 and score<80 then 1 else 0 end as 中等, case when score>=80 and score<90 then 1 else 0 end as 優良, case when score>=90 then 1 else 0 end as 優秀 from SC)t left join course on t.cid=course.cid group by cid order by cid

小rrrrr:Mysql 使用 Group by 之Error 1055 之坑?zhuanlan.zhihu.com

19、按各科平均成績從低到高和及格率的百分數從高到低順序

select cid,avg(score) as avg_score, count(if(score>=60,sid,null))/count(sid) as pass_rate from SC GROUP BY(cid) order by avg(score),pass_rate

20、查詢學生的總成績并進行排名

select sid,sum(score) from SC group by (sid) order by sum(score) desc

21、查詢不同老師所教不同課程平均分從高到低顯示

select course.tid,SC.cid,avg(score)as avg_score from course left join SC on course.cid=SC.cid group by tid,cid order by avg(score) desc

22、查詢所有課程的成績第2名到第3名的學生信息及該課程成績

select cid,sid,score from (select cid,sid,score, row_number() over(partition by cid order by score desc)as ranking from SC)c where ranking>=2 and ranking<=3

23、統計各科成績各分數段人數:課程編號,課程名稱,[100-85],[85-70],[70-60],[0-60]及所占百分比

#注意case when 前用sum求和,表示滿足條件的人數的求和,而不是計次!! select SC.cid,cname, concat(round(100*sum(case when score between 85 and 100 then 1 else 0 end)/count(sid),2),'%') as '[100-85]', concat(round(100*sum(case when score between 70 and 85 then 1 else 0 end)/count(sid),2),'%') as '[85-70]', concat(round(100*sum(case when score between 60 and 70 then 1 else 0 end)/count(sid),2),'%') as '[70-60]', concat(round(100*sum(case when score<=60 then 1 else 0 end)/count(sid),2),'%') as '[0-60]' from SC left join course on SC.cid=course.cid GROUP BY SC.cid,cname

24、查詢學生平均成績及其名次

select sid,avg_score,row_number() over(order by avg_score desc)as ranking from (SELECT sid,avg(score)as avg_score from SC group by sid order by avg_score desc)a

25、查詢各科成績前三名的記錄

select * from (select cid,score,row_number() over(partition by cid order by score desc)as rankk from SC)a where rankk<=3

26、查詢每門課程被選修的學生數

select cid,count(sid)as 人數 from SC group by cid

27、查詢出只選修了一門課程的全部學生的學號和姓名

select sid from (select sid,count(cid)as 選課數 from SC group by sid)a where 選課數=1

28、查詢男生、女生人數

select ssex,count(distinct sid)as 人數 from student group by ssex

29、查詢名字中含有"風"字的學生信息

select * from Student where sname like "%風"

30、查詢同名同性學生名單,并統計同名人數

select sname,ssex,count(sid) from Student group by ssex,sname having count(sid)>=2

  • 有關時間序列的查詢

31、查詢1990年出生的學生名單(注:Student表中Sage列的類型是datetime)

select * from student where year(sage)='1990'

32、查詢每門課程的平均成績,結果按平均成績升序排列,平均成績相同時,按課程號降序排列

select cid,avg(score)as avg_score from SC group by cid order by avg_score,cid desc

33、成績不重復,查詢選修「張三」老師所授課程的學生中,成績最高的學生信息及其成績

思路:四表連接,篩選出教師為張三的課的學生成績,限制出排名第一的學生,取出學生信息

selectsc.sid,sname,cname,score from sc left join courseon sc.cid=course.cid left join teacheron course.tid=teacher.tid left join studenton sc.sid=student.sid where tname='張三' order by score desc limit 1;

34、成績有重復的情況下,查詢選修「張三」老師所授課程的學生中,成績最高的學生

思路:先查出張三老師對應的課程,學生的最高成績,將此成績作為子查詢的篩選條件,進行四表連接的查詢篩選

select student.*,score from student inner join SC on student.sid=SC.sid inner join course on SC.cid=course.cid inner join teacher on course.tid=teacher.tid where tname='張三' and score= (select max(score) from teacher inner join course on teacher.tid=course.tid inner join SC on course.cid=SC.cid where tname='張三')

由于創建的表格里面沒有重復的成績,所以返回結果沒有發生變化

35、查詢不同課程成績相同的學生的學生編號、課程編號、學生成績

SELECT DISTINCT a.* FROMsc AS a INNER JOIN sc AS b WHERE a.score = b.score AND a.cid != b.cid ;

注:上述方法算出來的會包含課程相同,學號不同的情況,比如最后兩行。所以題目敘述不嚴謹,課程不同成績相同是指課程兩兩不同即可還是全部不能相同,這點沒有指明。

36、查詢每門成績最好的前兩名

窗口函數

rank:并列名次,占用下一名次位置

dense_rank:并列名次,不占用下一名次位置

row_number:不考慮并列名次

SELECT * from (select cid,sid,score, rank() over(partition by cid order by score desc)as rankk from SC)a where rankk<=2

37、統計每門課程的學生選修人數(超過 5 人的課程才統計)

select cid,count(sid) from SC group by cid having count(sid)>5

38、檢索至少選修兩門課程的學生學號

select sid,count(cid) from SC group by sid having count(cid)>=2

39、查詢選修了全部課程的學生信息

先計算出一共有多少門課程,作為子查詢。對學號進行分組,分組限定條件為學的課程數和總課程數相等。

select SC.sid,any_value(sname),any_value(sage),any_value(ssex) from SC left join student on SC.sid=student.sid group by SC.sid having count(cid)= (select count(distinct cid) from SC)

40.查詢各學生的年齡,只按年份來算

select sid,year(now())-year(sage) as 年齡 #年份相減,四舍五入 from student

41.查詢本周過生日的學生

select sid,sname from student where week(now())=week(sage)

43. 查詢下周過生日的學生

select sid,sname from student where week(now())+1=week(sage)

44、查詢本月過生日的學生

select sid,sname from student where month(sage)=month(now())

45、查詢下月過生日的學生

select sid,sname from student where month(sage)=month(now())+1

總結

以上是生活随笔為你收集整理的sql 百分数_SQL经典50题笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。