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))
相关推荐
心止水j2 小时前
数据采集 案例
数据仓库
早睡早起早日毕业8 小时前
大数据管理与应用系列丛书《大数据平台架构》之吃透HBase:从原理到架构的深度解剖
hadoop·hbase
b***676416 小时前
深入解析HDFS:定义、架构、原理、应用场景及常用命令
hadoop·hdfs·架构
lisw0517 小时前
社区数据仓库的可持续连接性!
大数据·数据仓库·人工智能·机器学习
howard200517 小时前
6.5 Hive查询优化:执行计划与性能初探
hive·性能优化·执行计划
大数据0018 小时前
SCD缓慢变化维Type1-Type3
hive·scd
B站计算机毕业设计之家18 小时前
电商数据实战:python京东商品爬取与可视化系统 大数据 Hadoop spark 优秀项目(源码)✅
大数据·hadoop·python·机器学习·spark·echarts·推荐算法
p***434818 小时前
后端在消息系统中的顺序保证
数据库·数据仓库·docker
e***582318 小时前
【分布式】Hadoop完全分布式的搭建(零基础)
大数据·hadoop·分布式
en-route1 天前
维度建模之星型模式(Star Schema)
数据仓库