Hive案例-学生成绩表综合案例

本文通过一个学生成绩管理的综合案例,详细介绍了在Hive中进行数据操作,包括元数据管理,基本查询,group by与集合函数应用,order by/sort by/distribute by的区别,join查询的各种类型,以及left semi join的使用,全面展示了Hive在数据分析中的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

元数据:

course数据:
1,数据库
2,数学
3,信息系统
4,操作系统
5,数据结构
6,数据处理
student数据:
95002,刘晨,女,19,IS
95017,王风娟,女,18,IS
95018,王一,女,19,IS
95013,冯伟,男,21,CS
95014,王小丽,女,19,CS
95019,邢小丽,女,19,IS
95020,赵钱,男,21,IS
95003,王敏,女,22,MA
95004,张立,男,19,IS
95012,孙花,女,20,CS
95010,孔小涛,男,19,CS
95005,刘刚,男,18,MA
95006,孙庆,男,23,CS
95007,易思玲,女,19,MA
95008,李娜,女,18,CS
95021,周二,男,17,MA
95022,郑明,男,20,MA
95001,李勇,男,20,CS
95011,包小柏,男,18,MA
95009,梦圆圆,女,18,MA
95015,王君,男,18,MA
95016,钱国,男,21,MA
studentcourse数据:
95001,1,81
95001,2,85
95001,3,88
95001,4,70
95002,2,90
95002,3,80
95002,4,71
95002,5,60
95003,1,82
95003,3,90
95003,5,100
95004,1,80
95004,2,92
95004,4,91
95004,5,70
95005,1,70
95005,2,92
95005,3,99
95005,6,87
95006,1,72
95006,2,62
95006,3,100
95006,4,59
95006,5,60
95006,6,98
95007,3,68
95007,4,91
95007,5,94
95007,6,78
95008,1,98
95008,3,89
95008,6,91
95009,2,81
95009,4,89
95009,6,100
95010,2,98
95010,5,90
95010,6,80
95011,1,81
95011,2,91
95011,3,81
95011,4,86
95012,1,81
95012,3,78
95012,4,85
95012,6,98
95013,1,98
95013,2,58
95013,4,88
95013,5,93
95014,1,91
95014,2,100
95014,4,98
95015,1,91
95015,3,59
95015,4,100
95015,6,95
95016,1,92
95016,2,99
95016,4,82
95017,4,82
95017,5,100
95017,6,58
95018,1,95
95018,2,100
95018,3,67
95018,4,78
95019,1,77
95019,2,90
95019,3,91
95019,4,67
95019,5,87
95020,1,66
95020,2,99
95020,5,93
95021,2,93
95021,5,91
95021,6,99
95022,3,69
95022,4,93
95022,5,82
95022,6,100
在hive中建表:
create table course 
(num int,course string) 
row format delimited fields terminated by ',';

load data local inpath '/home/potter/course.txt' 
into table course;

create table student 
(id int , name string , sex string ,age int , deparment string) 
row format delimited fields terminated by ',';

load data local inpath "/home/potter/student1.txt" 
into table student;

create table studentcourse 
(id int,num int,score int) 
row format delimited fields terminated by ',';

load data local inpath '/home/potter/studentcourse.txt' 
into table studentcourse;
第一题:基本操作

(1)查询全体学生的学号与姓名

select id,name from student;

结果:
95002   刘晨
95017   王风娟
95018   王一
95013   冯伟
95014   王小丽
95019   邢小丽
95020   赵钱
95003   王敏
95004   张立
95012   孙花
95010   孔小涛
95005   刘刚
95006   孙庆
95007   易思玲
95008   李娜
95021   周二
95022   郑明
95001   李勇
95011   包小柏
95009   梦圆圆
95015   王君
95016   钱国

(2)查询选修了课程的学生姓名

create table id_course as 
select sc.id id,c.course course 
from course c join studentcourse sc on c.num=sc.num ;
结果:
id_course.id    id_course.course
95001   数据库
95001   数学
95001   信息系统
95001   操作系统
95002   数学
95002   信息系统
95002   操作系统
95002   数据结构
95003   数据库
95003   信息系统
95003   数据结构
95004   数据库
95004   数学
95004   操作系统
95004   数据结构
95005   数据库
95005   数学
95005   信息系统
95005   数据处理
95006   数据库
95006   数学
95006   信息系统
95006   操作系统
95006   数据结构
95006   数据处理
95007   信息系统
95007   操作系统
95007   数据结构
95007   数据处理
95008   数据库
95008   信息系统
95008   数据处理
95009   数学
95009   操作系统
95009   数据处理
95010   数学
95010   数据结构
95010   数据处理
95011   数据库
95011   数学
95011   信息系统
95011   操作系统
95012   数据库
95012   信息系统
95012   操作系统
95012   数据处理
95013   数据库
95013   数学
95013   操作系统
95013   数据结构
95014   数据库
95014   数学
95014   操作系统
95015   数据库
95015   信息系统
95015   操作系统
95015   数据处理
95016   数据库
95016   数学
95016   操作系统
95017   操作系统
95017   数据结构
95017   数据处理
95018   数据库
95018   数学
95018   信息系统
95018   操作系统
95019   数据库
95019   数学
95019   信息系统
95019   操作系统
95019   数据结构
95020   数据库
95020   数学
95020   数据结构
95021   数学
95021   数据结构
95021   数据处理
95022   信息系统
95022   操作系统
95022   数据结构
95022   数据处理

select ic.course, s.name 
from id_course ic join student s on ic.id=s.id;

结果:
数据库  李勇
数学    李勇
信息系统        李勇
操作系统        李勇
数学    刘晨
信息系统        刘晨
操作系统        刘晨
数据结构        刘晨
数据库  王敏
信息系统        王敏
数据结构        王敏
数据库  张立
数学    张立
操作系统        张立
数据结构        张立
数据库  刘刚
数学    刘刚
信息系统        刘刚
数据处理        刘刚
数据库  孙庆
数学    孙庆
信息系统        孙庆
操作系统        孙庆
数据结构        孙庆
数据处理        孙庆
信息系统        易思玲
操作系统        易思玲
数据结构        易思玲
数据处理        易思玲
数据库  李娜
信息系统        李娜
数据处理        李娜
数学    梦圆圆
操作系统        梦圆圆
数据处理        梦圆圆
数学    孔小涛
数据结构        孔小涛
数据处理        孔小涛
数据库  包小柏
数学    包小柏
信息系统        包小柏
操作系统        包小柏
数据库  孙花
信息系统        孙花
操作系统        孙花
数据处理        孙花
数据库  冯伟
数学    冯伟
操作系统        冯伟
数据结构        冯伟
数据库  王小丽
数学    王小丽
操作系统        王小丽
数据库  王君
信息系统        王君
操作系统        王君
数据处理        王君
数据库  钱国
数学    钱国
操作系统        钱国
操作系统        王风娟
数据结构        王风娟
数据处理        王风娟
数据库  王一
数学    王一
信息系统        王一
操作系统        王一
数据库  邢小丽
数学    邢小丽
信息系统        邢小丽
操作系统        邢小丽
数据结构        邢小丽
数据库  赵钱
数学    赵钱
数据结构        赵钱
数学    周二
数据结构        周二
数据处理        周二
信息系统        郑明
操作系统        郑明
数据结构        郑明
数据处理        郑明
第二题:hive的group by 和集合函数

(1)查询学生的总人数

select count(*) from student;

结果:
22

(2)计算1号课程的学生平均成绩

select num ,avg(score) 
from studentcourse where num=1 group by num;

结果:
1       83.66666666666667

(3)查询各科成绩平均分

create table course_score as 
select c.course course,sc.score score 
from course c join studentcourse sc on c.num=sc.num;
结果:
course_score.course     course_score.score
数据库  81
数学    85
信息系统        88
操作系统        70
数学    90
信息系统        80
操作系统        71
数据结构        60
数据库  82
信息系统        90
数据结构        100
数据库  80
数学    92
操作系统        91
数据结构        70
数据库  70
数学    92
信息系统        99
数据处理        87
数据库  72
数学    62
信息系统        100
操作系统        59
数据结构        60
数据处理        98
信息系统        68
操作系统        91
数据结构        94
数据处理   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值