HIVE中不同列的平均函数
Posted
技术标签:
【中文标题】HIVE中不同列的平均函数【英文标题】:Average function on different columns in HIVE 【发布时间】:2016-09-20 11:55:25 【问题描述】:我想使用 hive 查询找到 3 列的平均值。 考虑以下数据:
我需要找到每个学生的平均分,然后是每个学校的总分的平均值: NULL 应该被忽略。
我的输出应该是这样的:
你们能帮帮我吗
【问题讨论】:
呃,你想得到哪个输出?你有两个候选人。 请以格式化文本而不是图像发布数据;这将帮助人们建立一个可以工作的例子。您甚至可以查看minimal reproducible example 来改进您的问题 首先我需要找到每个学校每个学生的平均成绩。然后我需要获得各个学校(学校 A 和学校 B)的平均成绩。 【参考方案1】:Hive 应自动忽略 NULL
报告的 here 上的聚合值。
为了可读性,我建议使用COALESCE
而不是IF IS NULL
语句,例如:COALESCE(Math,0) as Math
【讨论】:
【参考方案2】:每个学生的平均值:
select school,SL_No,Name,Math,Phy,Chem,(if(Math is NULL,0,Math)+if(Phy is NULL,0,Phy)+if(Chem is NULL,0,Chem))/3 as avg_marks from my_table
每所学校的平均分
select school,avg(avg_marks) from (select school,SL_No,Name,Math,Phy,Chem,(if(Math is NULL,0,Math)+if(Phy is NULL,0,Phy)+if(Chem is NULL,0,Chem))/3 as avg_marks from my_table
) temp group by school
【讨论】:
以上是关于HIVE中不同列的平均函数的主要内容,如果未能解决你的问题,请参考以下文章