【发布时间】:2015-10-01 09:40:15
【问题描述】:
如何为同一项目的每组行计算一个值的分位数(ntile 或百分位数)?
我想知道项目“101”,仅考虑“p”为 1 的行,例如,该值需要位于前 25%。
create table t1
(item INT,
p INT,
value FLOAT
);
insert into t1 values ('101', '1', '.5');
insert into t1 values ('101', '2', '.4');
insert into t1 values ('101', '1', '.6');
insert into t1 values ('101', '2', '.2');
insert into t1 values ('101', '1', '.7');
insert into t1 values ('101', '2', '.3');
insert into t1 values ('102', '1', '1.5');
insert into t1 values ('102', '2', '1.4');
insert into t1 values ('102', '1', '1.6');
insert into t1 values ('102', '2', '1.2');
insert into t1 values ('102', '1', '1.7');
insert into t1 values ('102', '2', '1.3');
我尝试了以下方法,但出现错误。
SELECT
item,
p,
value,
NTILE(4) OVER (ORDER BY value DESC) AS quartile
FROM t1
group by item
where p=1
错误信息:
编译语句时出错:FAILED ParseException line 8:0 在项目附近的“位置”缺少 EOF
我可以在 R 中使用如下命令:
d[p==1, quantile(value, .75, na.rm=TRUE), by=item]
但出于性能原因,我需要在 Hadoop 中使用它。
【问题讨论】: