分析函式——NTILE(n)

呆呆笨笨的魚發表於2014-06-12
有時會有這樣的需求:如果資料排序後分為三部分,業務人員只關心其中的一部分,如何將這中間的三分之一資料拿出來呢?

這時比較好的選擇,就是使用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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章