HIVE 中不同列的平均函数
Average function on different columns in HIVE
我想使用配置单元查询求出 3 列的平均值。
考虑以下数据:
我需要求出每个学生的平均分,然后求出每所学校总分的平均值:
NULL 应该被忽略。
我的输出应该是这样的:
你们能帮帮我吗
每个学生的平均值:
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 应自动忽略聚合上的 NULL
值,如报告的那样 here。
为了可读性,我建议使用 COALESCE
而不是 IF IS NULL
语句,例如:COALESCE(Math,0) as Math
我想使用配置单元查询求出 3 列的平均值。
考虑以下数据:
我需要求出每个学生的平均分,然后求出每所学校总分的平均值: NULL 应该被忽略。
我的输出应该是这样的:
你们能帮帮我吗
每个学生的平均值:
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 应自动忽略聚合上的 NULL
值,如报告的那样 here。
为了可读性,我建议使用 COALESCE
而不是 IF IS NULL
语句,例如:COALESCE(Math,0) as Math