declare @ntiles int = 10 declare @scale float = 10 ; with salary_ntiles as ( SELECT *, NTILE(@ntiles) OVER (ORDER BY salary) AS ntile_group from salary ) , ntiles_group as ( select ntile_group, min(salary) as min_salary_in_group, max(salary) as max_salary_in_group, count(*) as samples_in_group from salary_ntiles group by ntile_group ) select *, REPLICATE('*',cast(samples_in_group/@scale as bigint)) as dist from ntiles_group order by ntile_group