sqlANYntiledeciles
sql
SELECT customer_id,
spend,
NTILE(10) OVER (ORDER BY spend DESC) AS spend_decile
FROM customers;Great for segmentation, scoring, and rough percentile groupings.
Percent rank, cumulative distribution, percentile-style bucketing, and segmentation patterns.
Turn ordered values into percentile-like analytics.
SELECT customer_id,
spend,
NTILE(10) OVER (ORDER BY spend DESC) AS spend_decile
FROM customers;Great for segmentation, scoring, and rough percentile groupings.
SELECT player_id,
score,
PERCENT_RANK() OVER (ORDER BY score) AS pct_rank
FROM leaderboard;A convenient way to label records as top 5%, top 10%, and so on.
WITH scored AS (
SELECT salary,
CUME_DIST() OVER (ORDER BY salary) AS cd
FROM employees
)
SELECT *
FROM scored
WHERE cd >= 0.90;This is an intuitive pattern when exact percentile functions are unavailable or vary by dialect.
Practical bucketing queries for product and revenue analytics.
WITH bucketed AS (
SELECT customer_id,
lifetime_value,
NTILE(4) OVER (ORDER BY lifetime_value DESC) AS quartile
FROM customers
)
SELECT customer_id,
lifetime_value,
CASE WHEN quartile = 1 THEN 'top_quartile' ELSE 'other' END AS segment
FROM bucketed;This is a simple but effective pattern for growth, CRM, and pricing analysis.
WITH scored AS (
SELECT user_id,
engagement_score,
NTILE(5) OVER (ORDER BY engagement_score DESC) AS bucket
FROM user_scores
)
SELECT user_id,
engagement_score,
CASE bucket
WHEN 1 THEN 'elite'
WHEN 2 THEN 'high'
WHEN 3 THEN 'medium'
WHEN 4 THEN 'low'
ELSE 'very_low'
END AS engagement_band
FROM scored;Often easier to explain to stakeholders than raw percentiles.