命令格式。double percentile(bigint , )
--以数组形式返回多个百分位精确计算结果。
array percentile(bigint , array( [, ...]))命令说明。 计算精确百分位数,适用于小数据量。先对指定列升序排列,然后取精确的第p位百分数。p必须在0和1之间。percentile是从编号0开始计算,例如某列数据为100、200、300,列数据的编号顺序为0、1、2,计算该列的0.3百分位点,percentile结果是2×0.3=0.6,即值位于编号0和1之间,结果为100+(200-100)×0.6=160。此函数为MaxCompute 2.0扩展函数。 参数说明。colname:必填。值为BIGINT类型的列。p:必填。需要精确的百分位数。取值为[0.0,1.0]。返回值说明。返回DOUBLE或ARRAY类型。 示例。示例1:计算0.3百分位的薪资(sal)。命令示例如下:select percentile(sal, 0.3) from emp;返回结果如下:+------------+
| _c0 |
+------------+
| 1290.0 |
+------------+示例2:与group by配合使用,对所有职工按照部门(deptno)进行分组,并计算同组职工0.3百分位的薪资(sal)。命令示例如下:select deptno, percentile(sal, 0.3) from emp group by deptno;返回结果如下:+------------+------------+
| deptno | _c1 |
+------------+------------+
| 10 | 1875.0 |
| 20 | 1475.0 |
| 30 | 1250.0 |
+------------+------------+示例3:与group by配合使用,对所有职工按照部门(deptno)进行分组,并计算同组职工0.3、0.5、0.8百分位的薪资(sal)。命令示例如下:set odps.sql.type.system.odps2=true;
select deptno, percentile(sal, array(0.3, 0.5, 0.8)) from emp group by deptno;返回结果如下:+------------+------------+
| deptno | _c1 |
+------------+------------+
| 10 | [1875.0,2450.0,5000.0] |
| 20 | [1475.0,2975.0,3000.0] |
| 30 | [1250.0,1375.0,1600.0] |
+------------+------------+
|