Antes de la introducción de expresiones de tabla comunes en MySQL 8, el primer método de GL sería el más rápido, pero aquí hay un par de otras ideas (que también usan tecnología más antigua), solo por diversión...
1.
SELECT x.*
, COUNT(*) rank
FROM my_table x
JOIN my_table y
ON y.a = x.a
AND y.b <= x.b
GROUP
BY x.a
, x.b;
2.
SELECT x.*
, FIND_IN_SET(b,n) rank
FROM my_table x
JOIN
( SELECT a
, GROUP_CONCAT(b ORDER BY b) n
FROM my_table
GROUP
BY a
) y
ON y.a = x.a;