NTILE(): Splitting Rows Into Buckets
Use NTILE(4) to assign employees into salary quartiles.
Overview
NTILE(n) divides the ordered rows of a window into n roughly equal buckets,
assigning each row a bucket number from 1 to n. It's the SQL way to compute
percentiles/quartiles/tertiles for leaderboards and segmentation.
The Query
Loading playground environment...
Step-by-Step Breakdown
NTILE(4): splits employees into 4 buckets (quartiles) by salary.OVER (ORDER BY salary DESC): bucket 1 holds the highest-paid quarter.- If rows don't divide evenly, the earlier buckets get the extra rows.
NTILE vs manual thresholds
NTILE is order-based, not value-based, bucket edges depend on row counts,
not fixed salary cutoffs. Use it for ranking segments, not precise ranges.
Variations
Split movies into 3 budgets tiers (tertiles):
Loading playground environment...
Common Mistakes
- Assuming equal value ranges. Buckets are sized by row count, so the salary gap between bucket 1 and 2 may differ from 2 to 3.
- Non-deterministic ties. Rows with equal
ORDER BYvalues may land in different buckets arbitrarily. - Forgetting ORDER BY.
NTILEwithout an order has undefined bucket assignment.
Cite this resource
SQLSimplified. "NTILE(): Splitting Rows Into Buckets Example". Available at: https://sqlsimplified.online/examples/ntile