2013-06-05 75 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; 

它不是最有效的方式,但就是這樣來記住第一..