Hive笔记-ntile

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 的数据就可以了

    原文作者:raincoffee
    原文地址: https://www.jianshu.com/p/23feb5ceb9e8
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞