分析函数——NTILE(n)

有时会有这样的需求:如果数据排序后分为三部分,业务人员只关心其中的一部分,如何将这中间的三分之一数据拿出来呢?

这时比较好的选择,就是使用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 的数据就可以了

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28929558/viewspace-1181432/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28929558/viewspace-1181432/

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值