这个函数的参数为NTILE(buckets),这个bucket参数指定了分片的片数,下面我们看例子来说明
SQL> SELECT
2 prd_type_id,SUM(amount),
3 NTILE(2) OVER (ORDER BY SUM(amount) DESC) AS ntile
4 FROM all_sales
5 WHERE year=2003
6 AND amount IS NOT NULL
7 GROUP BY prd_type_id
8 ORDER BY prd_type_id;
PRD_TYPE_ID SUM(AMOUNT) NTILE
----------- ----------- ----------
1 905081.84 1
2 186381.22 2
3 478270.91 1
4 402751.16 2
注意这里的N为2,因此分成了下面的1,2两片
SQL> SELECT
2 prd_type_id,SUM(amount),
3 NTILE(3) OVER (ORDER BY SUM(amount) DESC) AS ntile
4 FROM all_sales
5 WHERE year=2003
6 AND amount IS NOT NULL
7 GROUP BY prd_type_id
8 ORDER BY prd_type_id;
PRD_TYPE_ID SUM(AMOUNT) NTILE
----------- ----------- ----------
1 905081.84 1
2 186381.22 3
3 478270.91 1
4 402751.16 2
注意这里的N为3,因此分成了下面的1,2,3三片,这里我的看法是当分片不均时,都是向上最加(即有两个1片)
当N=4时就与RANK相同了
PRD_TYPE_ID SUM(AMOUNT) NTILE
----------- ----------- ----------
1 905081.84 1
2 186381.22 4
3 478270.91 2
4 402751.16 3
以上是网友的意见,我的试验如下:
SQL> ;
1 select prd_type_id,sum(amount),
2 ntile(2) over (order by sum(amount) desc) as ntil
3 from all_sales
4* where year=2003
SQL> i group by prd_type_id
SQL> /
PRD_TYPE_ID SUM(AMOUNT) NTILE
----------- ----------- ----------
5 null 1
4 699054.57 1
1 349535.92 1
7 349529.76 1
6 349529.66 2
2 349527.34 2
3 349526.62 2
这个函数的作用是把结果集尽量平均地分为 N 部分 .
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/271063/viewspace-912074/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/271063/viewspace-912074/