Voorafgaand aan de introductie van algemene tabeluitdrukkingen in MySQL 8, zou de eerste methode van GL het snelst zijn, maar hier zijn een paar andere ideeën (ook met oudere technologie), gewoon voor de lol...
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;