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))
相关推荐
王的宝库2 小时前
MapReduce / Hive / Pig :从底层批处理到 SQL/脚本落地
hive·hadoop·sql·mapreduce
IT从业者张某某4 小时前
Docker部署Hadoop-01-Docker安装
hadoop·docker·eureka
小哥哥咯4 小时前
数据仓库维度建模思维导图—— 基于《The Data Warehouse Toolkit, 3rd Edition》(第三版修订版)
大数据·数据仓库
forever_ai4 小时前
数据仓库ods层文档模版
数据仓库
IT从业者张某某5 小时前
Docker部署Hadoop-04-把Hadoop容器导出导入并使用
java·hadoop·docker
升职佳兴5 小时前
Hadoop 三节点集群环境变量工程化:从 /etc/profile 迁移到 /etc/profile.d/ 全过程记录
大数据·hadoop·分布式
IT从业者张某某5 小时前
Docker部署Hadoop-05-配置Docker容器的命名卷和挂载卷
hadoop·docker·容器
网络工程小王14 小时前
【大数据技术详解】——HIVE技术(学习笔记)
大数据·hive·hadoop
泰克教育官方账号15 小时前
泰涨知识 | 【编程操作详解】Spark读写Hive
大数据·hive·spark
冬至喵喵15 小时前
什么是数据仓库?
大数据·数据仓库·spark