Comando Sql para contar quantidade de pessoas por idade

Boa tarde Pessoal,
Estou com um problema, preciso de um comando sql que me traga a quantidade de pessoas que existe em minha tabela pessoas, separada por idade e por empresa. Até aí tudo bem, consegui fazer uma consulta que funcionou beleza, exemplo abaixo:

‘Select COUNT(*) as total FROM tb_pessoas where ps_idade >= 29 and ps_idade <= 33 AND em_id =:r AND ps_sexo = “Feminino”’

mas agora preciso calcular levando em conta que a idade é armazenada no banco de dados como data de nascimento, então tenho que descobrir a idade antes de fazer a comparação. Segue abaixo:

‘Select COUNT(*) as total FROM tb_pessoas where (TIMESTAMPDIFF(YEAR, c.nascimento, NOW()) AS idade FROM tb_pessoas) idade >= 29 and idade <= 33 AND em_id =:r’

Não esta funcionando, acusa erro no alias idade, ja fiz de tudo e não consigo, se alguém puder dar uma luz! Desde já obrigado!

Veja essa consulta aqui.

Select COUNT(*) as total, (TIMESTAMPDIFF(YEAR,
c.nascimento, NOW()) ) as idade FROM tb_pessoas HAVING idade >= 29 and idade
<= 33 AND em_id =:r

Agora esta dando erro no em_id creio que devido a condição HAVING, nessa consulta acima esqueci de colocar o “c” após o tb_pessoas que serve como alias da tabela.

o mais próximo que cheguei é essa abaixo, mas também esta dando erro.

result := dbl_consulta.KeyValue;
qr_consulta.Close;
qr_consulta.SQL.Clear;
qr_consulta.SQL.Add(‘Select COUNT(*) as total FROM tb_pessoas where (SELECT TIMESTAMPDIFF(YEAR, p.ps_idade, CURDATE()) as idade FROM tb_pessoas p) idade >= 29 and idade <= 33 AND em_id =:r’ );
qr_consulta.Params.ParamByName(‘r’).AsInteger := result ;
qr_consulta.Open();
lbl_total29a33.Caption := qr_consulta.FieldByName(‘total’).Text;