HIve-ntile
转载:http://blog.itpub.net/28929558/viewspace-1181432/
有时会有这样的需求:如果数据排序后分为三部分,业务人员只关心其中的一部分,如何将这中间的三分之一数据拿出来呢?
这时比较好的选择,就是使用NTILE函数
例:
SQL> select
2 dept_id
3 ,sale_date
4 ,goods_type
5 ,sale_cnt
6 ,ntile(3) over (order by sale_cnt desc nulls last) all_cmp
7 ,ntile(3) over (partition by dept_id order by sale_cnt desc nulls last) all_dept
8 from criss_sales
9 ;
DEPT_ID SALE_DATE GOODS_TYPE SALE_CNT ALL_CMP ALL_DEPT
D02 2014/5/2 G03 900 1 1
D01 2014/4/30 G03 800 1 1
D01 2014/3/4 G00 700 1 1
D02 2014/3/6 G00 500 2 1
D02 2014/4/27 G01 300 2 2
D01 2014/4/8 G01 200 2 2
D02 2014/4/8 G02 100 3 3
D01 2014/5/4 G02 80 3 2
D01 2014/6/12 G01 3 3
可以看到,Ntile函数为各个记录在记录集中的排名计算比例,返回每条记录所在集合比例位置的值。
例如我们关心全公司前三分之一部分的数据,只需选择 ALL_CMP = 1 的数据就可以了
如果只是关心全公司中间的三分之一数据,只需选择 ALL_CMP = 2 的数据就可以了