ITPub博客

首页 > 应用开发 > IT综合 > NTILE()函数

NTILE()函数

原创 IT综合 作者:wmlm 时间:2007-04-23 17:33:19 0 删除 编辑
NTILE()函数把记录结果集分成N部分[@more@]

这个函数的参数为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博客 ” ,链接:https://blog.itpub.net/271063/viewspace-912074/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-04-08

  • 博文量
    398
  • 访问量
    3716775