Nézzük egy példán1 belül a binning/bucketing mindhárom típusát:

select
  last_name,
  salary,
  -- equiheight binning
  ntile(4) over (order by salary) as quartile,
  -- equiwidth binning
  width_bucket(salary, 0, max(salary+1) over (), 4) as bucket,
  -- custom binning
  case
    when salary < 10 then
      'low'
    when salary < 24 then
      'mid'
    else
      'high'
  end as salary_group
from employees
order by salary
;

Equiheight binning (ntile)

Az ntile(n) egy ablak függvény (window/analytic function), visszatérési értéke 1..n, a vödör száma. Ugyanannyi darab rekord kerül minden vödörbe (avagy a histogram oszlopai azonos magasságúak), a maradék darabszámot egyesével szétosztja az 1. vödörrel kezdve.2

Pl. AAAABCDEF 3 db vödörbe sorolva: 1: AAA, 2: ABC, 3: DEF. (‘A’ rekord két vödörbe is került.)

Pl. AAAABCDEFG 3 db vödörbe sorolva: 1: AAAA, 2: BCD, 3: EFG. (Az 1. vödörbe eggyel több rekord került.)

Equiwidth binning (width_bucket)

A width_bucket(expr, min, max, n) függvény számokat vagy dátumokat osztályoz, a megadott (alul zárt, felül nyitott) értékintervallumot egyenlő részekre osztja (avagy a histogram oszlopai azonos szélességűek). Visszatérési értéke 0..n+1, a vödör száma (0, ha expr < min; n+1, ha expr >= max; különben 1..n).3

Custom binning

Ez egyszerűen egy case when besorolás tetszőleges feltételekkel.