第7章 综合案例练习(初级)
一 环境准备
1.1 建表语句
hive>-- 创建学生表DROPTABLEIFEXISTS student;createtableifnotexists student_info(
stu_id string COMMENT'学生id',
stu_name string COMMENT'学生姓名',
birthday string COMMENT'出生日期',
sex string COMMENT'性别')row format delimited fieldsterminatedby','
stored as textfile;-- 创建课程表DROPTABLEIFEXISTS course;createtableifnotexists course_info(
course_id string COMMENT'课程id',
course_name string COMMENT'课程名',
tea_id string COMMENT'任课老师id')row format delimited fieldsterminatedby','
stored as textfile;-- 创建老师表DROPTABLEIFEXISTS teacher;createtableifnotexists teacher_info(
tea_id string COMMENT'老师id',
tea_name string COMMENT'学生姓名')row format delimited fieldsterminatedby','
stored as textfile;-- 创建分数表DROPTABLEIFEXISTS score;createtableifnotexists score_info(
stu_id string COMMENT'学生id',
course_id string COMMENT'课程id',
score intCOMMENT'成绩')row format delimited fieldsterminatedby','
stored as textfile;
1.2 数据准备
(1)创建/opt/module/data目录
[atguigu@hadoop102 module]$ mkdir data
(2)将如下4个文件放到/opt/module/data目录下
(3)数据样式说明
[atguigu@hadoop102 data]$ vim student_info.txt
001,彭于晏,1995-05-16,男
002,胡歌,1994-03-20,男
003,周杰伦,1995-04-30,男
004,刘德华,1998-08-28,男
005,唐国强,1993-09-10,男
006,陈道明,1992-11-12,男
007,陈坤,1999-04-09,男
008,吴京,1994-02-06,男
009,郭德纲,1992-12-05,男
010,于谦,1998-08-23,男
011,潘长江,1995-05-27,男
012,杨紫,1996-12-21,女
013,蒋欣,1997-11-08,女
014,赵丽颖,1990-01-09,女
015,刘亦菲,1993-01-14,女
016,周冬雨,1990-06-18,女
017,范冰冰,1992-07-04,女
018,李冰冰,1993-09-24,女
019,邓紫棋,1994-08-31,女
020,宋丹丹,1991-03-01,女
[atguigu@hadoop102 data]$ vim course_info.txt
01,语文,100302,数学,100103,英语,100404,体育,100205,音乐,1002[atguigu@hadoop102 data]$ vim teacher_info.txt
1001,张高数
1002,李体音
1003,王子文
1004,刘丽英
[atguigu@hadoop102 data]$ vim score_info.txt
001,01,94002,01,74004,01,85005,01,64006,01,71007,01,48008,01,56009,01,75010,01,84011,01,61012,01,44013,01,47014,01,81015,01,90016,01,71017,01,58018,01,38019,01,46020,01,89001,02,63002,02,84004,02,93005,02,44006,02,90007,02,55008,02,34009,02,78010,02,68011,02,49012,02,74013,02,35014,02,39015,02,48016,02,89017,02,34018,02,58019,02,39020,02,59001,03,79002,03,87004,03,89005,03,99006,03,59007,03,70008,03,39009,03,60010,03,47011,03,70012,03,62013,03,93014,03,32015,03,84016,03,71017,03,55018,03,49019,03,93020,03,81001,04,54002,04,100004,04,59005,04,85007,04,63009,04,79010,04,34013,04,69014,04,40016,04,94017,04,34020,04,50005,05,85007,05,63009,05,79015,05,59018,05,87
1.3 插入数据
(1)插入数据
hive>
load data local inpath '/opt/module/data/student_info.txt' into table student_info;
load data local inpath '/opt/module/data/course_info.txt' into table course_info;
load data local inpath '/opt/module/data/teacher_info.txt' into table teacher_info;
load data local inpath '/opt/module/data/score_info.txt' into table score_info;
(2)验证插入数据情况
hive>
select * from student_info limit 5;
select * from course_info limit 5;
select * from teacher_info limit 5;
select * from score_info limit 5;
二 简单查询
2.1 查找特定条件
2.1.1 查询姓名中带“冰”的学生名单
- code
hive> select *from student_infowhere stu_name like "%冰%";
结果
stu_id stu_name birthday sex
017 范冰冰 1992-07-04 女
018 李冰冰 1993-09-24 女
2.1.2 查询姓“王”老师的个数
- code
hive> select count(*) wang_countfrom teacher_infowhere tea_name like '王%';
结果
wang_count
1
2.1.3 检索课程编号为“04”且分数小于60的学生的课程信息,结果按分数降序排列
- code
hive> select stu_id, course_id, scorefrom score_infowhere course_id ='04' and score<60order by score desc;
结果
stu_id course_id score
004045900104540200450014044001704340100434
2.1.4 查询数学成绩不及格的学生和其对应的成绩,按照学号升序排序
- code
hive> select s.stu_id, s.stu_name, t1.scorefrom student_info sjoin( select * from score_info where course_id=(select course_id from course_info where course_name='数学') and score <60) t1 on s.stu_id = t1.stu_idorder by s.stu_id;
select
s.stu_id,
st.stu_name,
s.score
from score_info s
join student_info st
on s.stu_id=st.stu_id
join course_info c
on c.course_id=s.course_id
where c.course_name ='数学'and s.score <60orderby stu_id;
结果
s.stu_id s.stu_name t1.score
005 唐国强 44007 陈坤 55008 吴京 34011 潘长江 49013 蒋欣 35014 赵丽颖 39015 刘亦菲 48017 范冰冰 34018 李冰冰 58019 邓紫棋 39020 宋丹丹 59
三 汇总分析
3.1 汇总分析
3.1.1 查询编号为“02”的课程的总成绩
- code
hive>select course_id,sum(score) score_sumfrom score_infowhere course_id='02'group by course_id;
结果
course_id score_sum
021133
3.1.2 查询参加考试的学生个数
思路:对成绩表中的学号做去重并count
- code
hive>select count(distinct stu_id) stu_numfrom score_info;
结果
stu_num
19
3.2 分组
3.2.1 查询各科成绩最高和最低的分,以如下的形式显示:课程号,最高分,最低分
思路:按照学科分组并使用max和min。
- code
hive> select course_id,max(score) max_score,min(score) min_scorefrom score_infogroup by course_id;
结果
course_id max_score min_score
0194380293340399320410034058759
3.2.2 查询每门课程有多少学生参加了考试(有考试成绩)
- code
hive> select course_id,count(stu_id) stu_numfrom score_infogroup by course_id;
结果
course_id stu_num
0119021903190412055
3.2.3 查询男生、女生人数
- code
hive>select sex,count(stu_id) countfrom student_infogroup by sex;
结果
sex count
女 9
男 11
3.3 分组结果的条件
3.3.1 查询平均成绩大于60分的学生的学号和平均成绩
1)思路分析
(1)平均成绩:展开来说就是计算每个学生的平均成绩
(2)这里涉及到“每个”就是要分组了
(3)平均成绩大于60分,就是对分组结果指定条件
(4)首先要分组求出每个学生的平均成绩,筛选高于60分的,并反查出这批学生,统计出这些学生总的平均成绩。
2)Hql实操
- code
hive> select stu_id,avg(score) score_avgfrom score_infogroup by stu_idhaving score_avg >60;
结果
stu_id score_avg
00172.500286.2500481.500575.400673.3333333333333300974.201361.001570.2501681.2502069.75
3.3.2 查询至少选修四门课程的学生学号
1)思路分析
(1)需要先计算出每个学生选修的课程数据,需要按学号分组
(2)至少选修两门课程:也就是每个学生选修课程数目>=4,对分组结果指定条件
2)Hql实操
- code
hive> select stu_id,count(course_id) course_countfrom score_infogroup by stu_idhaving course_count >=4;
结果
stu_id course_num
00140024004400550075009501040134014401540164017401840204
3.3.3 [课堂讲解]查询同姓(假设每个学生姓名的第一个字为姓)的学生名单并统计同姓人数大于2的姓
思路:先提取出每个学生的姓并分组,如果分组的count>=2则为同姓
- code
hive>select t1.first_name,count(*) count_first_namefrom( select stu_id, stu_name,substr(stu_name,0,1) first_name from student_info) t1group by t1.first_namehaving count_first_name >=2;
结果
t1.first_name count_first_name
刘 2
周 2
陈 2
3.3.4 查询每门课程的平均成绩,结果按平均成绩升序排序,平均成绩相同时,按课程号降序排列
思路:按照课程号分组并求组内的平均值
- code
hive>select course_id,avg(score) score_avgfrom score_infogroup by course_idorder by score_avg asc, course_id desc;
结果
course_id score_avg
0259.631578947368420463.4166666666666640167.157894736842110369.421052631578950574.6
3.3.5 统计参加考试人数大于等于15的学科
按课程分组并统计组内人数,过滤条件大于等于15
- code
hive>select course_id,count(stu_id) stu_countfrom score_infogroup by course_idhaving stu_count >=15;
结果
course_id stu_count
011902190319
3.4 查询结果排序&分组指定条件
3.4.1 查询学生的总成绩并按照总成绩降序排序
思路:分组、sum、排序
- code
hive>select stu_id,sum(score) sum_scorefrom score_infogroup by stu_idorder by sum_score desc;
结果
stu_id sum_score
005377009371002345004326016325007299001290015281020279013244010233018232006220014192017181012180011180019178008129
3.4.2 [课堂讲解]按照如下格式显示学生的语文、数学、英语三科成绩,没有成绩的输出为0,按照学生的有效平均成绩降序显示
学生id 语文 数学 英语 有效课程数 有效平均成绩
- code
hive>select si.stu_id,sum(if(ci.course_name='语文',score,0))`语文`,sum(if(ci.course_name='数学',score,0))`数学`,sum(if(ci.course_name='英语',score,0))`英语`,count(*)`有效课程数`,avg(si.score)`平均成绩`from score_info sijoin course_info cion si.course_id=ci.course_idgroup by si.stu_idorder by `平均成绩` desc
select
sc.stu_id `学生id`,sum(casewhen ci.course_name='语文'and sc.score >0then score else0end)`语文`,sum(casewhen ci.course_name='数学'and sc.score >0then score else0end)`数学`,sum(casewhen ci.course_name='英语'and sc.score >0then score else0end)`英语`,count(ci.course_id)`有效课程数`,avg(sc.score)`平均成绩`from score_info sc
join course_info ci
on sc.course_id=ci.course_id
groupby sc.stu_id
orderby`平均成绩`desc;
结果
学生id 语文 数学 英语 有效课程数 平均成绩
002748487486.25004859389481.5016718971481.25005644499575.4009757860574.2006719059373.33333333333333001946379472.5015904884470.25020895981469.75013473593461.0012447462360.0011614970360.0007485570559.8019463993359.333333333333336010846847458.25018385849458.0014813932448.0017583455445.25008563439343.0
3.4.3 查询一共参加三门课程且其中一门为语文课程的学生的id和姓名
- code
hive>select t2.stu_id, s.stu_namefrom( select t1.stu_id from( select stu_id, course_id from score_info where stu_id in( select stu_id from score_info where course_id ="01")) t1 group by t1.stu_id having count(t1.course_id)=3) t2join student_info s on t2.stu_id = s.stu_id;
结果
t2.stu_id s.stu_name
006 陈道明
008 吴京
011 潘长江
012 杨紫
019 邓紫棋
四 复杂查询
4.1 子查询
4.1.1 [课堂讲解]查询所有课程成绩均小于60分的学生的学号、姓名
- code
hive>select s.stu_id, s.stu_namefrom( select stu_id,sum(if(score >=60,1,0)) flag from score_info group by stu_id having flag =0) t1 join student_info s on s.stu_id = t1.stu_id;
结果
s.stu_id s.stu_name
008 吴京
017 范冰冰
4.1.2 查询没有学全所有课的学生的学号、姓名
解释:没有学全所有课,也就是该学生选修的课程数 < 总的课程数
- code
hive>select s.stu_id, s.stu_namefrom student_info sleft join score_info sc on s.stu_id = sc.stu_idgroup by s.stu_id, s.stu_namehaving count(course_id)<(select count(course_id) from course_info);
结果
s.stu_id s.stu_name
001 彭于晏
002 胡歌
003 周杰伦
004 刘德华
006 陈道明
008 吴京
010 于谦
011 潘长江
012 杨紫
013 蒋欣
014 赵丽颖
015 刘亦菲
016 周冬雨
017 范冰冰
018 李冰冰
019 邓紫棋
020 宋丹丹
4.1.3 查询出只选修了三门课程的全部学生的学号和姓名
解释:学生选修的课程数 = 3
- code
hive>select s.stu_id, s.stu_namefrom student_info sjoin( select stu_id,count(course_id) course_count from score_info group by stu_id having course_count =3) t1on s.stu_id = t1.stu_id;
结果
s.stu_id s.stu_name
006 陈道明
008 吴京
011 潘长江
012 杨紫
019 邓紫棋
五 多表查询
5.1 表联结
5.1.1 [课堂讲解]查询有两门以上的课程不及格的同学的学号及其平均成绩
① 先找出有两门以上不及格的学生名单,按照学生分组,过滤组内成绩低于60的并进行count,count>=2。
② 接着做出一张表查询学生的平均成绩并和上一个子查询中的学生学号进行连接
- code
hive>select t1.stu_id, t2.avg_scorefrom( select stu_id,sum(if(score <60,1,0)) flage from score_info group by stu_id having flage >=2) t1join( select stu_id,avg(score) avg_score from score_info group by stu_id) t2 on t1.stu_id = t2.stu_id;
结果
t1.stu_id t2.avg_score
00759.800843.001058.2501361.001448.001570.2501745.2501858.001959.33333333333333602069.75
5.1.2 查询所有学生的学号、姓名、选课数、总成绩
- code
hive>select s.stu_id, s.stu_name,count(sc.course_id) count_course,sum(sc.score) sum_scorefrom student_info sleft join score_info sc on s.stu_id = sc.stu_idgroup by s.stu_id,s.stu_name;
结果
stu_id stu_name course_count course_sum
001 彭于晏 4290002 胡歌 4345003 周杰伦 00004 刘德华 4326005 唐国强 5377006 陈道明 3220007 陈坤 5299008 吴京 3129009 郭德纲 5371010 于谦 4233011 潘长江 3180012 杨紫 3180013 蒋欣 4244014 赵丽颖 4192015 刘亦菲 4281016 周冬雨 4325017 范冰冰 4181018 李冰冰 4232019 邓紫棋 3178020 宋丹丹 4279
5.1.3 查询平均成绩大于85的所有学生的学号、姓名和平均成绩
- code
hive>select s.stu_id, s.stu_name,avg(sc.score) avg_scorefrom score_info scleft join student_info s on s.stu_id = sc.stu_idgroup by s.stu_id, s.stu_namehaving avg_score >85
结果
stu_id stu_name avg_score
002 胡歌 86.25
5.1.4 查询学生的选课情况:学号,姓名,课程号,课程名称
- code
hive>select s.stu_id, s.stu_name, c.course_id, c.course_namefrom score_info scjoin course_info c on sc.course_id = c.course_idjoin student_info s on sc.stu_id = s.stu_id;
结果
s.stu_id s.stu_name c.course_id c.course_name
001 彭于晏 01 语文
002 胡歌 01 语文
004 刘德华 01 语文
005 唐国强 01 语文
006 陈道明 01 语文
007 陈坤 01 语文
008 吴京 01 语文
009 郭德纲 01 语文
010 于谦 01 语文
011 潘长江 01 语文
012 杨紫 01 语文
013 蒋欣 01 语文
014 赵丽颖 01 语文
015 刘亦菲 01 语文
016 周冬雨 01 语文
017 范冰冰 01 语文
018 李冰冰 01 语文
019 邓紫棋 01 语文
020 宋丹丹 01 语文
001 彭于晏 02 数学
002 胡歌 02 数学
004 刘德华 02 数学
005 唐国强 02 数学
006 陈道明 02 数学
007 陈坤 02 数学
008 吴京 02 数学
009 郭德纲 02 数学
010 于谦 02 数学
011 潘长江 02 数学
012 杨紫 02 数学
013 蒋欣 02 数学
014 赵丽颖 02 数学
015 刘亦菲 02 数学
016 周冬雨 02 数学
017 范冰冰 02 数学
018 李冰冰 02 数学
019 邓紫棋 02 数学
020 宋丹丹 02 数学
001 彭于晏 03 英语
002 胡歌 03 英语
004 刘德华 03 英语
005 唐国强 03 英语
006 陈道明 03 英语
007 陈坤 03 英语
008 吴京 03 英语
009 郭德纲 03 英语
010 于谦 03 英语
011 潘长江 03 英语
012 杨紫 03 英语
013 蒋欣 03 英语
014 赵丽颖 03 英语
015 刘亦菲 03 英语
016 周冬雨 03 英语
017 范冰冰 03 英语
018 李冰冰 03 英语
019 邓紫棋 03 英语
020 宋丹丹 03 英语
001 彭于晏 04 体育
002 胡歌 04 体育
004 刘德华 04 体育
005 唐国强 04 体育
007 陈坤 04 体育
009 郭德纲 04 体育
010 于谦 04 体育
013 蒋欣 04 体育
014 赵丽颖 04 体育
016 周冬雨 04 体育
017 范冰冰 04 体育
020 宋丹丹 04 体育
005 唐国强 05 音乐
007 陈坤 05 音乐
009 郭德纲 05 音乐
015 刘亦菲 05 音乐
018 李冰冰 05 音乐
Time taken:20.878 seconds,Fetched:74row(s)
5.1.5 查询出每门课程的及格人数和不及格人数
- code
hive> select c.course_id, c.course_name, t1.`及格人数`, t1.`不及格人数`from course_info cjoin( select course_id,sum(if(score >=60,1,0))as`及格人数`,sum(if(score <60,1,0))as`不及格人数` from score_info group by course_id ) t1 on c.course_id = t1.course_id;
结果
c.course_id c.course_name t1.及格人数 t1.不及格人数
01 语文 12702 数学 81103 英语 13604 体育 6605 音乐 41
Time taken:10.746 seconds,Fetched:5row(s)
5.1.6 查询课程编号为03且课程成绩在80分以上的学生的学号和姓名及课程信息
- code
hive>select s.stu_id, s.stu_name, t1.score, t1.course_id, c.course_namefrom student_info sjoin( select stu_id, score, course_id from score_info where score >80 and course_id ='03') t1on s.stu_id = t1.stu_idjoin course_info c on c.course_id = t1.course_id;
结果
s.stu_id s.stu_name t1.score t1.course_id c.course_name
002 胡歌 8703 英语
004 刘德华 8903 英语
005 唐国强 9903 英语
013 蒋欣 9303 英语
015 刘亦菲 8403 英语
019 邓紫棋 9303 英语
020 宋丹丹 8103 英语
Time taken:9.064 seconds,Fetched:7row(s)
5.2 多表连接
5.2.1 课程编号为"01"且课程分数小于60,按分数降序排列的学生信息
- code
hive>select s.stu_id, s.stu_name, s.birthday, s.sex, t1.scorefrom student_info sjoin( select stu_id, course_id, score from score_info where score <60 and course_id ='01') t1on s.stu_id=t1.stu_idorder by t1.score desc;
结果
s.stu_id s.stu_name s.birthday s.sex t1.score
017 范冰冰 1992-07-04 女 58008 吴京 1994-02-06 男 56007 陈坤 1999-04-09 男 48013 蒋欣 1997-11-08 女 47019 邓紫棋 1994-08-31 女 46012 杨紫 1996-12-21 女 44018 李冰冰 1993-09-24 女 38
Time taken:8.936 seconds,Fetched:7row(s)
5.2.2 查询所有课程成绩在70分以上的学生的姓名、课程名称和分数,按分数升序排列
- code
hive>select s.stu_id, s.stu_name, c.course_name, s2.scorefrom student_info sjoin( select stu_id,sum(if(score >=70,0,1)) flage from score_info group by stu_id having flage =0) t1on s.stu_id = t1.stu_idleft join score_info s2 on s.stu_id = s2.stu_idleft join course_info c on s2.course_id = c.course_id;
结果
s.stu_id s.stu_name c.course_name s2.course
002 胡歌 语文 74002 胡歌 数学 84002 胡歌 英语 87002 胡歌 体育 100016 周冬雨 语文 71016 周冬雨 数学 89016 周冬雨 英语 71016 周冬雨 体育 94
Time taken:27.166 seconds,Fetched:8row(s)
5.2.3 查询该学生不同课程的成绩相同的学生编号、课程编号、学生成绩
- code
hive>select sc1.stu_id, sc1.course_id, sc1.scorefrom score_info sc1 join score_info sc2 on sc1.stu_id = sc2.stu_idand sc1.course_id <> sc2.course_idand sc1.score = sc2.score;
结果
sc1.stu_id sc1.course_id sc1.score
0160371017043401601710050585007056300905790170234005048500704630090479
Time taken:8.881 seconds,Fetched:10row(s)
5.2.4 查询课程编号为“01”的课程比“02”的课程成绩高的所有学生的学号
知识点:多表连接 + 条件
- code
hive>select s1.stu_idfrom( select sc1.stu_id, sc1.course_id, sc1.score from score_info sc1 where sc1.course_id ='01') s1join( select sc2.stu_id, sc2.course_id, score from score_info sc2 where sc2.course_id ="02")s2on s1.stu_id=s2.stu_idwhere s1.score > s2.score;
结果
stu_id
001005008010011013014015017019020
5.2.5 查询学过编号为“01”的课程并且也学过编号为“02”的课程的学生的学号、姓名
- code
hive>select t1.stu_id as`学号`, s.stu_name as`姓名`from( select stu_id from score_info sc1 where sc1.course_id='01' and stu_id in( select stu_id from score_info sc2 where sc2.course_id='02'))t1join student_info son t1.stu_id = s.stu_id;
结果
学号 姓名
001 彭于晏
002 胡歌
004 刘德华
005 唐国强
006 陈道明
007 陈坤
008 吴京
009 郭德纲
010 于谦
011 潘长江
012 杨紫
013 蒋欣
014 赵丽颖
015 刘亦菲
016 周冬雨
017 范冰冰
018 李冰冰
019 邓紫棋
020 宋丹丹
Time taken:10.161 seconds,Fetched:19row(s)
5.2.6 [课堂讲解]查询学过“李体音”老师所教的所有课的同学的学号、姓名
- code
hive>select t1.stu_id, si.stu_namefrom( select stu_id from score_info si where course_id in( select course_id from course_info c join teacher_info t on c.tea_id = t.tea_id where tea_name='李体音'--李体音教的所有课程 ) group by stu_id having count(*)=2--学习所有课程的学生)t1left join student_info sion t1.stu_id=si.stu_id;
结果
s.stu_id s.stu_name
005 唐国强
007 陈坤
009 郭德纲
Time taken:27.16 seconds,Fetched:3row(s)
5.2.7 [课堂讲解]查询学过“李体音”老师所讲授的任意一门课程的学生的学号、姓名
- code
hive>select t1.stu_id, si.stu_namefrom( select stu_id from score_info si where course_id in( select course_id from course_info c join teacher_info t on c.tea_id = t.tea_id where tea_name='李体音') group by stu_id)t1left join student_info sion t1.stu_id=si.stu_id;
结果
s.stu_id s.stu_name
001 彭于晏
002 胡歌
004 刘德华
005 唐国强
007 陈坤
009 郭德纲
010 于谦
013 蒋欣
014 赵丽颖
015 刘亦菲
016 周冬雨
017 范冰冰
018 李冰冰
020 宋丹丹
Time taken:9.391 seconds,Fetched:14row(s)
5.2.8 [课堂讲解]查询没学过"李体音"老师讲授的任一门课程的学生姓名
- code
hive>select stu_id, stu_namefrom student_infowhere stu_id not in( select stu_id from score_info si where course_id in( select course_id from course_info c join teacher_info t on c.tea_id = t.tea_id where tea_name='李体音') group by stu_id);
结果
stu_id stu_name
003 周杰伦
006 陈道明
008 吴京
011 潘长江
012 杨紫
019 邓紫棋
Time taken:36.559 seconds,Fetched:6row(s)
5.2.9 [课堂讲解]查询至少有一门课与学号为“001”的学生所学课程相同的学生的学号和姓名
- code
hive>select si.stu_id, si.stu_namefrom score_info scjoin student_info sion sc.stu_id = si.stu_idwhere sc.course_id in( select course_id from score_info where stu_id='001'--001的课程) and sc.stu_id <>'001'--排除001学生group by si.stu_id,si.stu_name;
结果
s1.stu_id s2.stu_name
002 胡歌
004 刘德华
005 唐国强
006 陈道明
007 陈坤
008 吴京
009 郭德纲
010 于谦
011 潘长江
012 杨紫
013 蒋欣
014 赵丽颖
015 刘亦菲
016 周冬雨
017 范冰冰
018 李冰冰
019 邓紫棋
020 宋丹丹
Time taken:8.97 seconds,Fetched:18row(s)
5.2.10 按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩
- code
hive>select si.stu_name, ci.course_name, sc.score, t1.avg_scorefrom score_info scjoin student_info sion sc.stu_id=si.stu_idjoin course_info cion sc.course_id=ci.course_idjoin( select stu_id,avg(score) avg_score from score_info group by stu_id)t1on sc.stu_id=t1.stu_idorder by t1.avg_score desc;
结果
t2.stu_name t2.course_name t2.score t1.avg_score
胡歌 体育 10086.25
胡歌 数学 8486.25
胡歌 英语 8786.25
胡歌 语文 7486.25
刘德华 体育 5981.5
刘德华 语文 8581.5
刘德华 英语 8981.5
刘德华 数学 9381.5
周冬雨 英语 7181.25
周冬雨 数学 8981.25
周冬雨 体育 9481.25
周冬雨 语文 7181.25
唐国强 数学 4475.4
唐国强 音乐 8575.4
唐国强 语文 6475.4
唐国强 体育 8575.4
唐国强 英语 9975.4
郭德纲 音乐 7974.2
郭德纲 体育 7974.2
郭德纲 英语 6074.2
郭德纲 语文 7574.2
郭德纲 数学 7874.2
陈道明 语文 7173.33333333333333
陈道明 数学 9073.33333333333333
陈道明 英语 5973.33333333333333
……
李冰冰 音乐 8758.0
李冰冰 语文 3858.0
李冰冰 英语 4958.0
李冰冰 数学 5858.0
赵丽颖 数学 3948.0
赵丽颖 语文 8148.0
赵丽颖 体育 4048.0
赵丽颖 英语 3248.0
范冰冰 英语 5545.25
范冰冰 体育 3445.25
范冰冰 数学 3445.25
范冰冰 语文 5845.25
吴京 语文 5643.0
吴京 数学 3443.0
吴京 英语 3943.0
Time taken:20.137 seconds,Fetched:74row(s)
版权归原作者 yiluohan0307 所有, 如有侵权,请联系我们删除。