SELECT COUNT(*) AS ilosc_w_zakresie,zakresy.minimum,zakresy.maksimum
FROM gabinet_pacjenci AS gp,
(
SELECT 0 AS minimum,10 AS maksimum
UNION
SELECT 10,20
UNION
SELECT 20,30
) AS zakresy
WHERE YEAR(CURDATE())-YEAR(gp.dataurodzenia)>=zakresy.minimum AND YEAR(CURDATE())-YEAR(gp.dataurodzenia)<zakresy.maksimum
GROUP BY zakresy.minimum
Zamiast UNION z zakresami możesz podstawić tam fizyczną tabelę z zakresami.
Wiek jest liczony na podstawie różnicy lat, więc nie jest dokładny, możesz tam wstawić dokładniejszą formułę.