(003)初级大数据开发_基础SQL(11题-20题)

(002)初级大数据开发_基础SQL(1题-10题)

--11.查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩

--第一步:先初步筛选出存在不合格成绩学生的id

SELECT DISTINCT s.SId

FROM SC s

where s.score <60;

--第二步.找出不合格成绩中大于等于两门课程的学生,

--需要对sc中的学生进行分组并且只需要第一步里面查出来的学生并且不及格课程大于等于2

SELECT s.SId ,AVG(s.score) as avgscore

from SC s

group by s.SId

HAVING s.SId IN (SELECT DISTINCT s.SId

FROM SC s

where s.score <60) and COUNT(*)>=2 ;--先找出不合格课程的学生,然后在这些学生里面再找出不及格课程大于等于2

--第三步.用第二步中sid去关联student表

SELECT s.sid,s.Sname,a.avgscore

FROM Student s

join (SELECT s.SId ,AVG(s.score) as avgscore

from SC s

group by s.SId

HAVING s.SId IN (SELECT DISTINCT s.SId

FROM SC s

where s.score <60) and COUNT(*)>=2 )a

ON s.SId =a.sid ;

--12.检索" 01 "课程分数小于 60,按分数降序排列的学生信息

--第一步:先找出01课程分数小于60的学生sid

SELECT s.SId

from SC s

WHERE s.CId ='01' and s.score <60;

--第二步:把第一步查询出来的sid和student表做关联然后得出01课程小于60的学生具体信息

SELECT s.*,a.score

FROM Student s

join (SELECT s.SId,s.score 

from SC s

WHERE s.CId ='01' and s.score <60)a

ON s.SId =a.sid

ORDER  BY a.score DESC ;

--13.按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩

--第一步:显然要对sc表进行分组得出每个学生的平均分

SELECT s.SId ,AVG(s.score) as avgscore

FROM SC s

group by s.SId

--第二步:把第一步得出的avgscore关联sc表得出所有成绩

SELECT *

FROM  sc s2

join (SELECT s.SId ,AVG(s.score) as avgscore

FROM SC s

group by s.SId) a ON  s2.sid =a.sid

ORDER BY avgscore DESC ;

/*14.查询各科成绩最高分、最低分和平均分:

以如下形式显示:课程 ID,课程 name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率

及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90

要求输出课程号和选修人数,查询结果按人数降序排列,若人数相同,按课程号升序排列

*/

--像这种需求不要慌,采用分而治之思想,从复制拆解到简单,再到从简单到复制的过程进行处理

--第一步:对sc表根据课程进行分组

SELECT s2.CId

from SC s2

group by  s2.CId

--第二步:根据每门课程找出对应需求即可

SELECT s.CId as "课程id"--课程id

,MAX(s.score) as "课程最高分"--课程最高分

,MIN(s.score) as "课程最低分"--课程最低分

,AVG(s.score)as "课程平均分"--课程平均分

,COUNT(*) as "课程选修人数"-- 课程选修人数

,SUM(CASE when s.score>=60 then 1 else 0 end) as "及格率"

,SUM(CASE when s.score>=70 and s.score <80 THEN 1 ELSE 0 END) as "中等率"

,SUM(CASE  WHEN s.score>=80 and s.score<90 THEN 1 ELSE 0 END) as "优良率 "

,SUM(CASE WHEN s.score>=90 then 1 else 0 end) as "优秀率 "

FROM SC s

group by s.CId

order BY COUNT(*) DESC ,s.CId;

--15.查询学生的总成绩,并进行排名,总分重复时不保留名次空缺

--第一步:先对sc成绩表根据学生sid进行分组得出每个学生的总成绩

SELECT s.SId ,SUM(s.score) as sum_score,count(s.score)+1 as rank

FROM  SC s

group by s.SId

ORDER BY sum_score desc;

--第二步: 不知道怎么得出排序

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

--第一步:需要对科目进行分组

SELECT c2.CId ,c2.Cname

FROM SC s2

join Course c2 on s2.CId =c2.CId

GROUP  BY c2.CId ,c2.Cname ;

--第二步:对每一组科目中的学生成绩进行成绩评估

SELECT c.CId as "课程编号"--课程编号

,c.Cname as "课程名称"--课程名称

,SUM(case when s.score>=85 and s.score<=100 then 1 else 0 END) as "[100-85]" --[100-85]

,SUM(CASE WHEN s.score>=70 and s.score<85 then 1 ELSE 0 END) as "[85-70]" --[85-70]

,SUM(case WHEN s.score>=60 and s.score<70 then 1 ELSE 0 end) as "[70-60]" --[70-60]

,SUM(case when s.score>=0 AND s.score<60 THEN 1 ELSE 0 END) as "[60-0]" --[60-0]

from SC s

join Course c on s.CId =c.CId

group by c.CId,c.Cname

-- 17.根据课程编号顺序升序,分数高低进降序进行排序(查询各科成绩记录)

SELECT s.CId,s.score 

FROM sc s

group by s.CId,s.score 

order by s.CId, s.score DESC

-- 18.查询各科成绩前三名的记录

--暂时不会做,不知道如何取每个课程的前三名,有会的小伙伴请给我留言,非常感谢!!

--19.查询每门课程被选修的学生数

--对sc表根据cid进行分组并统计每个分组中数据的条数

SELECTs.CId,COUNT(*) 

FROM SC s 

group by s.CId;

--20.查询出只选修两门课程的学生学号和姓名

--第一步:对sc表根据sid进行分组并统计每个学生学的课程数,并保存满足条件的学生sid

SELECT s.SId 

FROM SC s 

group by s.SId --对学生进行分组

HAVING COUNT(*)=2 ;

--第二步:把student表和第一步查出来的学生sid进行关联并输出对应学生的信息

SELECT s.*

FROM  Student s 

join (SELECT s.SId 

FROM SC s 

group by s.SId 

HAVINGCOUNT(*)=2)aons.SId=a.sid;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,185评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,652评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,524评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,339评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,387评论 6 391
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,287评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,130评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,985评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,420评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,617评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,779评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,477评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,088评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,716评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,857评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,876评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,700评论 2 354

推荐阅读更多精彩内容