为了账号安全,请及时绑定邮箱和手机立即绑定

Hive基本操作之平均成绩、优秀统计

标签:
MySQL 大数据

有一组成绩数据(学号;科目;成绩)

1001 01 90
1001 02 90
1001 03 90
1002 01 85
1002 02 85
1002 03 70
1003 01 70
1003 02 70
1003 03 85

启动hive交互模式,选库

[root@yaong ~]# hive
hive (default)> use default;

建成绩表

create table score(
    uid string,
    subject_id string,
    score int)
row format delimited fields terminated by '\t'; 

导数据入表

hive (default)> load data local inpath '/data/scores.dat' into table score;

查看导入数据

hive (default)> select * from score;

1001 01 90
1001 02 90
1001 03 90
1002 01 85
1002 02 85
1002 03 70
1003 01 70
1003 02 70
1003 03 85

计算平均成绩

select
    uid,
    score,
    avg(score) over(partition by subject_id) avg_score
from
    score;

uid score avg_score
1003 70 81.66666666666667
1002 85 81.66666666666667
1001 90 81.66666666666667
1003 70 81.66666666666667
1002 85 81.66666666666667
1001 90 81.66666666666667
1003 85 81.66666666666667
1002 70 81.66666666666667
1001 90 81.66666666666667

以平均成绩做标记(大于标0,否则标1)

select
    uid, score, avg_score,
    if(score>avg_score,0,1) flag
from
(select
    uid,
    score,
    avg(score) over(partition by subject_id) avg_score
from
    score) as t1;

uid score avg_score flag
1003 70 81.66666666666667 1
1002 85 81.66666666666667 0
1001 90 81.66666666666667 0
1003 70 81.66666666666667 1
1002 85 81.66666666666667 0
1001 90 81.66666666666667 0
1003 85 81.66666666666667 0
1002 70 81.66666666666667 1
1001 90 81.66666666666667 0

统计flag和为0的学号(所有学科都大于平均成绩)

select
    uid
from
(select
    uid, score, avg_score,
    if(score>avg_score,0,1) flag
from
(select
    uid,
    score,
    avg(score) over(partition by subject_id) avg_score
from
    score) as t1) as t2
group by uid
having sum(flag)=0;

uid
1001

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消