Hi,
Code:
SELECT M1.name, COUNT(*)
FROM MyTable M1 INNER JOIN MyTable M2
ON M1.name >= M2.name
GROUP BY M1.name
HAVING COUNT(*) <= (SELECT COUNT(*)
FROM MyTable M3
WHERE M3.name <= 'Andy');
This retrieves the results you want, although I am not sure how costly it gets as your table grow (in other words, as you collect more data in there).
Edit:
Changing the predicate in the HAVING clause to >=, you will get records of Andy and below.
If there are records where the name column is NULL, they are not counted in the ordering.