NTILE()函式

wmlm發表於2007-04-23
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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章