Criar sql para separar pessoas por grupos de idade

E porque não criar uma tabela com os intervalos de idade? Com valor mínimo e máximo de cada intervalo e sua descrição

INTERVALO
DESCRICAO   IDADE_MINIMA     IDADE_MAXIMA
'<=20'             0              20 
'21-25'           21              25
'26-30'           26              30
...
'>90'             91             200

SELECT i.descricao, count(p.*) FROM pessoas p, intervalo i WHERE (DATEDIFF(NOW(), dtnascimento) / 365.25) between i.idade_minima and i.idade_maxima GROUP BY i.descricao

Excelente solucao. Parametrizou os intervalos e o dia em que eles alterara, basta mudar a parametrizacao sem alterar o codigo. Parabens.

Fiz uma adaptação baseada nos exemplos mostrados e ficou:

select case when truncate(datediff(curdate(), c.data_nascimento) / 365.25, 0) <= 17 then 'ate 18' when truncate(datediff(curdate(), c.data_nascimento) / 365.25, 0) between 18 and 30 then 'de 18 a 30' when truncate(datediff(curdate(), c.data_nascimento) / 365.25, 0) between 31 and 40 then 'de 31 a 40' when truncate(datediff(curdate(), c.data_nascimento) / 365.25, 0) between 41 and 50 then 'de 41 a 50' when truncate(datediff(curdate(), c.data_nascimento) / 365.25, 0) between 51 and 60 then 'de 51 a 60' when truncate(datediff(curdate(), c.data_nascimento) / 365.25, 0) between 61 and 70 then 'de 61 a 70' when truncate(datediff(curdate(), c.data_nascimento) / 365.25, 0) > 70 then 'maior que 70' end as faixa_idade , count(c.id_candidato) as total, from candidato c group by 1;