2013-06-05 40 views
0
select perecentile(time,0.95) from sometable; 
gives the 95th percentile. 

我希望时间值低于此值的所有行的平均值。查询查找排除hiveQL中前5%的行的平均值

在oracle中它会是这样的: -

select avg(time) from sometable 
where 
time<(select percentile(time,0.95) from sometable); 

但在蜂巢就不可能在这里clause.When我使用工会使用子查询所有我不能给元组隔离我需要比较其他元组。

回答

1

您可以对百分位数的结果进行笛卡尔连接,然后过滤所有较小的值。

事情是这样的:

select avg(time) from sometable a 
join (select percentile(time,0.95) perc from sometable) b on (1=1) 
where a.time < b.perc; 

它不是最有效的方式,但就是这样来记住第一..