hive中如何求取中位数?

目录

中位数的概念

中位数(Median)又称中值,统计学中的专有名词,是按顺序排列的一组数据中居于中间位置的数,代表一个样本、种群或概率分布中的一个数值,其可将数值集合划分为相等的上下两部分。对于有限的数集,可以通过把所有观察值高低排序后找出正中间的一个作为中位数。如果观察值有偶数个,通常取最中间的两个数值的平均数作为中位数。

代码实现

准备数据

sql 复制代码
with temp as (
   select 13 as num 
   union all 
   select 23 as num 
   union all 
   select 7 as num 
   union all 
   select 30 as num 
   union all 
   select 56 as num 
   union all 
   select 78 as num 
   union all 
   select 100 as num 
   union all 
   select 3 as num 

)

实现

方法1:使用hive自带函数

分析最中间的两个数为23和30,均值为26.5

sql 复制代码
select percentile(num, 0.5) from temp;   ----26.5

方法2:正排倒排来一遍法

sql 复制代码
select avg(num)
from 
(
    select num 
        ,row_number() over(order by num) as rn1
        ,row_number() over(order by num desc) as rn2
    from temp
)as t 
where rn1 = rn2 or abs(rn1-rn2) = 1

方法3:充分利用窗口函数

sql 复制代码
select avg(num)
from 
(
    select num 
        ,row_number() over(order by num) as rn 
        ,count(*) over() as n
    from temp
)as t 
where rn in (floor(n/2)+1,if(mod(n,2) = 0,floor(n/2),floor(n/2)+1))
相关推荐
天地风雷水火山泽4 小时前
二百六十六、Hive——Hive的DWD层数据清洗、清洗记录、数据修复、数据补全
数据仓库·hive·hadoop
大数据深度洞察6 小时前
Hive企业级调优[2]—— 测试用表
数据仓库·hive·hadoop
lzhlizihang6 小时前
使用sqoop将mysql数据导入到hive报错ClassNotFoundException、Zero date value prohibited等错误
hive·报错·sqoop
goTsHgo6 小时前
Hive自定义函数——简单使用
大数据·hive·hadoop
江畔独步11 小时前
Hive内置集合函数-size,map_keys,map_values,sort_array,array_contains
数据仓库·hive·hadoop
天地风雷水火山泽11 小时前
二百六十五、Hive——目前Hive数仓各层表样例
数据仓库·hive·hadoop
棉花糖灬11 小时前
Hive常用函数
数据仓库·hive·hadoop
zhangjin12221 天前
kettle从入门到精通 第八十五课 ETL之kettle kettle中javascript步骤调用外部javascript/js文件
javascript·数据仓库·etl·kettle调用外部js
暮-夜染1 天前
从数据仓库到数据中台再到数据飞轮:我了解的数据技术进化史
大数据·数据仓库·数据飞轮
是店小二呀1 天前
从数据仓库到数据中台再到数据飞轮:社交媒体的数据技术进化史
大数据·数据仓库·媒体