Hive实现:1、获取每个人最高分对应的学科和分数(学生最高分);2、获取每门课程都高于平均分的人、课程和分数(三好学生:每科高于平均分);3、获取每个学科都及格(即不低于60分)的学生

本文通过Hive SQL解决三个实际问题:1. 获取每个学生的最高分及其对应学科;2. 查找每门课程分数均高于平均分的学生;3. 分析每个学科都及格(大于等于60分)的学生名单。通过开窗函数、临时表和LEFT JOIN等操作,展示了复杂数据查询的方法。

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

数据表和需求

表名:student, 结构和具体内容如下:
name course score
zs  Math    100
zs  Engl    80
ls  Math    90
ls  Engl    70

需求如下:
1、获取每个学生最高分对应的学科和分数
(方式一:使用row_number()开窗函数;方式二:不用开窗函数,使用join方式)
扩展:返回每一门课程和对应的最高分的学生姓名(思路:将分组的学生替换为学科即可,此处不再赘述)
2、获取每门课程都高于平均分的人、课程和分数

数据准备

set hive.exec.mode.local.auto=true;
set hive.cli.print.header=true;

create table student stored as orc as
select 'zs' as name, 'Math' as course, 100 as score union all
select 'zs' as name, 'Engl' as course, 80  as score union all
select 'ls' as name, 'Math' as course, 90  as score union all
select 'ls' as name, 'Engl' as course, 70  as score;

需求1:获取每个人最高分对应的学科和分数
第一步:使用开窗函数,用row_number(), 按name分组,每个人的分数排序,
第二步:排好序后,取出每个人的最高分即可


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值