NTILE()函数

NTILE ()函数把记录结果集分成N部分[@more@]

这个函数的参数为NTILEbuckets),这个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

注意这里的N2,因此分成了下面的12两片

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

注意这里的N3,因此分成了下面的123三片,这里我的看法是当分片不均时,都是向上最加(即有两个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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值