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 分钟前
Flink Stream API 源码走读 - print()
java·大数据·hadoop·flink·实时计算
君不见,青丝成雪1 小时前
hadoop技术栈(九)Hbase替代方案
大数据·hadoop·hbase
晴天彩虹雨1 小时前
存算分离与云原生:数据平台的新基石
大数据·hadoop·云原生·spark
yatingliu20192 小时前
HiveQL | 个人学习笔记
hive·笔记·sql·学习
SelectDB技术团队4 小时前
Apache Doris 在菜鸟的大规模湖仓业务场景落地实践
数据库·数据仓库·数据分析·apache doris·菜鸟技术
程序员小羊!7 小时前
数据仓库&OLTP&OLAP&维度讲解
数据仓库
最初的↘那颗心7 小时前
Flink Stream API - 源码开发需求描述
java·大数据·hadoop·flink·实时计算
Lx3528 小时前
MapReduce作业调试技巧:从本地测试到集群运行
大数据·hadoop
BYSJMG9 小时前
计算机大数据毕业设计推荐:基于Spark的气候疾病传播可视化分析系统【Hadoop、python、spark】
大数据·hadoop·python·信息可视化·spark·django·课程设计
励志成为糕手9 小时前
大数据MapReduce架构:分布式计算的经典范式
大数据·hadoop·mapreduce·分布式计算·批处理