Hive综合应用案例 — 学生成绩查询

此博客详细展示了如何在Hive中处理两个表格,一是计算每个班级的语文和数学总成绩,排除低于60分的学生;二是查询选修超过3门课程的学生姓名,并统计各课程选修人数,包括shujuku课程的平均成绩。涉及数据库操作、SQL查询及数据清洗。

第1关:计算每个班的语文总成绩和数学总成绩

 任务:计算每个班的语文总成绩和数学总成绩,要求有哪科低于60分,该名学生成绩不计入计算。

创建数据库:mydb

创建成绩表:score

字段名 类型 注释
name string 姓名
chinese string 语文成绩
maths string 数学成绩

部分数据如下:

  1. banzhang,89,98
  2. uanzhishu,99,89

数据切分方式:逗号

数据所在位置:/root/data/step1_files/score.txt

创建班级表:class

字段名 类型 注释
stuname string 姓名
classname string 所在班级

部分数据如下:

  1. xiaoming,c1
  2. xiaohei,c2

数据切分方式:逗号

数据所在位置:/root/data/step1_files/class.txt

 

—— 预期输出 ——

c1 88.0 132.0

c2 99.0 155.0

c3 177.0 197.0

---------- 禁止修改 ----------
drop database if exists mydb cascade;
set hive.auto.convert.join = false;
set hive.ignore.mapjoin.hint=false;
---------- 禁止修改 ----------


---------- begin ---------- 
---创建mydb数据库
create database if not exists mydb; 
---使用mydb数据库 
use mydb;
---创建表score
create table if not exists score( name string comment '姓名',
chinese string comment '语文成绩', 
maths string comment '数学成绩' ) row format delimited fields terminated by ',' stored as textfile;
---导入数据:/root/data/step1_files/score.txt
load data local inpath '/root/data/step1_files/score.txt' into table score; 
--创建表class
create table if not exists class( stuname string comment '姓名',
classname string comment '所在班级' ) row format delimited fields terminated by ',' stored as textfile;
---导入数据:/root/data/step1_files/class.txt
load data local inpath '/root/data/step1_files/class.txt' into table class;
--计算每个班的语文总成绩和数学总成绩,要求有哪科低于60分,该名学生成绩不计入计算。
select t1.classname,t1.chinese,t2.maths from(select c.classname classname,sum(s.chinese) chinese from class c,score s where c.stuname=s.name and s.chinese>=60 group by c.classname) t1,(select c.classname classname,sum(s.maths) maths from class c,score s where c.stuname=s.name and s.maths>=60 group by c.classname) t2 where t1.classname=t2.classname;
quit;
 ---------- end ----------

 

第2关:查询选修了3门以上的课程的学生姓名

任务:查询选修了3门以上的课程的学生姓名。

创建数据库:mydb

创建成绩表:my_stu

字段名 类型 注释
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值