1. 数据说明

(1) student表

hive> select * from student;

# 学生ID    学生姓名     性别    年龄    所在系
# sid sname sex age dept
95002 Aiden female 19 IS
95017 Jacob female 18 IS
95018 Ethan female 19 IS
95013 Matthew male 21 CS
95014 Nicholas female 19 CS
......

(2) course表

hive> select * from course;

# 课程ID    课程名称
# cid cname
1 Chinese
2 Math
3 English
4 Physics
5 Chemistry
6 Biology

(3) sc表

hive> select * from sc;

# 学生ID    课程ID  成绩
# sid cid score
95001 1 81
95001 2 85
95001 3 88
95001 4 70
95002 2 90
......

2. SQL查询练习题目

(1) 基本练习

<1> 查询全体学生的学号与姓名

select sid, sname from student;

<2> 查询选修了课程的学生姓名

select distinct sid from sc;

(2) hive的group by和集合函数

<1> 查询学生的总人数

select count(*) from student;

<2> 计算1号课程的学生平均成绩

select cid, avg(score) from sc
where cid = '1'
group by cid;

<3> 查询各科成绩平均分

select c.cname, tmp.avg_score from
course c join
(select cid, avg(score) avg_score from sc
group by cid) tmp
on c.cid = tmp.cid; /*
Chinese 83.66666666666667
Math 88.66666666666667
English 81.46153846153847
Physics 83.125
Chemistry 85.0
Biology 89.45454545454545
*/

<4> 查询1号课程的最高分数

select cid, max(score) max_score from sc
where cid = '1'
group by cid; /*
1 98
*/

<5> 求各个课程号及相应的选课人数

select cid, count(distinct sid) count_sid from sc
group by cid; /*
1 15
2 15
3 13
4 16
5 12
6 11
*/

<6> 查询选修了3门以上的课程的学生学号

select sid, count(distinct cid) count_cid from sc
group by sid
having count_cid > 3; /*
95001 4
95002 4
95004 4
95005 4
95006 6
95007 4
95011 4
95012 4
95013 4
95015 4
95018 4
95019 5
95022 4
*/

(3) hive的order by/sort by/distribute by

<1> 查询学生信息,结果按学号全局有序

select * from student
order by sid;

<2> 查询学生信息,结果区分性别按年龄有序

set mapred.reduce.tasks=2;(默认-1)

select * from student
distribute by sex
sort by age; /*
95009 Alexande female 18 MA
95017 Jacob female 18 IS
95008 Zachary female 18 CS
95014 Nicholas female 19 CS
95019 Jack female 19 IS
95018 Ethan female 19 IS
95002 Aiden female 19 IS
95007 Jaden female 19 MA
95012 Andrew female 20 CS
95003 Michael female 22 MA
95021 Connor male 17 MA
95005 Tyler male 18 MA
95011 Noah male 18 MA
95015 Jackson male 18 MA
95010 Caden male 19 CS
95004 Ryan male 19 IS
95022 Logan male 20 MA
95001 Caleb male 20 CS
95020 Joshua male 21 IS
95013 Matthew male 21 CS
95016 Brayden male 21 MA
95006 Dylan male 23 CS
*/

(4) join查询

<1> 查询每个学生及其选修课程的情况

select s.sname, c.cname from
student s join sc on s.sid = sc.sid
join course c on c.cid = sc.cid; /*
Caleb Chinese
Caleb Math
Caleb English
Caleb Physics
Aiden Math
Aiden English
Aiden Physics
Aiden Chemistry
Michael Chinese
Michael English
......
*/

<2> 查询学生的得分情况

select s.sname, c.cname, sc.score from
student s join sc on s.sid = sc.sid
join course c on c.cid = sc.cid; /*
Noah Chinese 81
Noah Math 91
Noah English 81
Noah Physics 86
Andrew Chinese 81
Andrew English 78
Andrew Physics 85
Andrew Biology 98
......
*/

<3> 查询选修2号课程且成绩在90分以上的所有学生

select s.sname, sc.cid, sc.score from
student s join sc on s.sid = sc.sid
where sc.cid = '2' and sc.score > 90; /*
Ryan 2 92
Tyler 2 92
Caden 2 98
Noah 2 91
Nicholas 2 100
Brayden 2 99
Ethan 2 100
Joshua 2 99
Connor 2 93
*/

<4> 查询所有学生的信息,如果在成绩表中有成绩,则输出成绩表中的课程号

select s.*, sc.cid from
student s left join sc
on s.sid = sc.sid; /*
......
95015 Jackson male 18 MA 1
95015 Jackson male 18 MA 3
95015 Jackson male 18 MA 4
95015 Jackson male 18 MA 6
95016 Brayden male 21 MA 1
95016 Brayden male 21 MA 2
95016 Brayden male 21 MA 4
*/

(5) LEFT SEMI JOIN

查询与"Jackson"在同一个系学习的学生

select student.sname, student.dept from student left semi join
(select dept from student where sname = 'Jackson') tmp
on student.dept = tmp.dept; /*
Michael MA
Tyler MA
Jaden MA
Connor MA
Logan MA
Noah MA
Alexande MA
Jackson MA
Brayden MA
*/

Hive案例05-学生成绩表综合案例的更多相关文章

  1. hive学习04-员工部门表综合案例

    知识点: 格式转换:cast(xxx as int) 按某列分桶某列排序,排序后打标机:例如:求每个地区工资最高的那个人的信息: ROW_NUMBER() OVER(PARTITION BY COLU ...

  2. 101 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 02 案例分析及实现 05 通过方法实现学生类与专业类关联——方案二

    101 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 02 案例分析及实现 05 通过方法实现学生类与专业类关联--方案二 本文知识点:通过方法实现学生类与 ...

  3. 098 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 02 案例分析及实现 02 编写并测试Subject类

    098 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 02 案例分析及实现 02 编写并测试Subject类 本文知识点:编写并测试Subject类 说明: ...

  4. 099 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 02 案例分析及实现 03 编写并测试Student类

    099 01 Android 零基础入门 02 Java面向对象 03 综合案例(学生信息管理) 02 案例分析及实现 03 编写并测试Student类 本文知识点:编写并测试Subject类 说明: ...

  5. 学生表sid,sname,结果表cid,cname,学生成绩表sid,cid,cscore,最高要求的分数输出候补课程专门命名

    --1.建表SQL: --学生表: -- Createtable createtable STUDENT ( SID   NUMBERnotnull, SNAME NVARCHAR2) ) table ...

  6. mysql经典面试题之学生成绩表

    需要数据库表1.学生表 Student(SID,Sname,Sage,Ssex) --SID 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 2.课程表 Course(CID, ...

  7. MapReduce:汇总学生表和成绩表为----学生成绩表

    已知两张数据表,其中表一存储的是学生编号.学生姓名:表二存储的是学生编号.考试科目.考试成绩:编写mapreduce程序,汇总两张表数据为一张统一表格. 表一: A001 zhangsan A002 ...

  8. 069 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 01 综合案例-数组移位-案例需求

    069 01 Android 零基础入门 01 Java基础语法 09 综合案例-数组移位 01 综合案例-数组移位-案例需求 本文知识点:综合案例-数组移位-案例需求 说明:因为时间紧张,本人写博客 ...

  9. 032 01 Android 零基础入门 01 Java基础语法 03 Java运算符 12 运算符和if-else条件语句的综合案例——闰年问题

    032 01 Android 零基础入门 01 Java基础语法 03 Java运算符 12 运算符和if-else条件语句的综合案例--闰年问题 本文知识点:运算符和if-else条件语句的综合案例 ...

随机推荐

  1. jsp和html的区别

    html是超文本标记语言,只要有浏览器,就可以显示出来了. jsp是java server page就是在java服务器端的页面,需要通过jdk的编译才可以显示在客户端的浏览器上. 不仅如此,jsp还 ...

  2. css概括

    CSS:美化页面 层叠样式表 修改标签样式 1.分类:内联    内嵌       外部引用 (1)内联: 写在标签里面,以属性的形式表现 属性名为style (2)内嵌:写在head标签里面,以标签 ...

  3. 完整的SOPC开发流程体验

    课程目标:学习并掌握完整的SOPC开发流程. 开发环境:Quartus15.1 学习内容:1.使用QSYS工具建立能够运行流水灯项目的NIOS II处理器系统 2.在quartus ii中添加NIOS ...

  4. A - 饭卡

    电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够).所以大家 ...

  5. 冲刺博客NO.8

    今天做了什么: 多天学习后,实现了短信验证的功能,可以选择国家,可以在Mob的后台管理短信验证 遇到的困难: 注册回调事件,afterEvent的判定(事件完成后调用)

  6. 使用tinymce富文本

    1.tinymce入门参考 https://www.tiny.cloud/docs/general-configuration-guide/basic-setup/ 2.tinymce安装选项 htt ...

  7. ElasticSearch5.0之后的改变

    ES5的变化 search_type=count和scan都移除了 count可以用size=0代替 GET /my_index/_search { "size": 0, &quo ...

  8. 【Spark调优】:结合业务场景,优选高性能算子

    聚合操作使用reduceByKey/aggregateByKey替代groupByKey 参见我的这篇博客说明 [Spark调优]:如果实在要shuffle,使用map侧预聚合的算子 内存充足前提下使 ...

  9. 人脸检测----Adaboost学习方法

    有了haar特征,有了提升性能的积分图,是不是已经可以很好的解决人脸检测问题了?答案是:no. 因为,计算每一个特征值的时候速度都大幅提升了,但是,一个小小的24*24是人脸图像根据不同的位置, 以及 ...

  10. Maven - 实例-6-聚合与继承

    创建项目 xxx - 继承自testDep.PPP <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi= ...