WIDTH_BUCKET and NTILE Comparison
SELECT 
 q_t.idx,
 q_t.val,
 WIDTH_BUCKET(q_t.val, 100, 1000, 10) wb_100_1k_10,
 NTILE(10)
    OVER (ORDER BY q_t.val) ntile_10
FROM
 (SELECT  1 idx,  100 val FROM DUAL UNION
  SELECT  2 idx,  210 val FROM DUAL UNION
  SELECT  3 idx,  320 val FROM DUAL UNION
  SELECT  4 idx,  430 val FROM DUAL UNION
  SELECT  5 idx,  510 val FROM DUAL UNION
  SELECT  6 idx,  600 val FROM DUAL UNION
  SELECT  7 idx,  730 val FROM DUAL UNION
  SELECT  8 idx,  810 val FROM DUAL UNION
  SELECT  9 idx,  900 val FROM DUAL UNION
  SELECT 10 idx,  990 val FROM DUAL UNION
  SELECT 11 idx,  700 val FROM DUAL UNION
  SELECT 12 idx, 1100 val FROM DUAL UNION
  SELECT 13 idx,  729 val FROM DUAL UNION
  SELECT 14 idx, 1600 val FROM DUAL
 ) q_t;

Oracle Width_Bucket

The WIDTH_BUCKET(q_t.val, 100, 1000, 10) in the query above specifies the range to be split into ten buckets as shown in the table. The values 729 and 730 fall in consecutive buckets. The value of 1000 and above will be out of range and get designated as bucket_value + 1 (11).

Also shown is the way NTile function splits the data into approximate segments based on the value in the range of 1 and 10.
Oracle Width_Bucket Table

Width_Bucket AR Example

Oracle registered trademark of Oracle Corporation.

Last Revised on: February 23, 2012

  72926