Причина, по которой ваш вопрос не работает, потому что это запрос агрегации. Следовательно, having
применяется после агрегации. Для фильтрации до агрегации используйте пункт where
.
Это достаточно легко сделать:
SELECT count(*)
FROM voluntario v
WHERE v.id_status = 1 AND
v.birth_date < date_sub(CURDATE(), interval 60 year)
Обратите внимание, что дата арифметика выполняется на CURDATE()
, а не на birth_date
. Это позволяет использовать индекс, содержащий birth_date
для запроса (при необходимости).
Имея age
в SELECT
, не имеет смысла, поскольку существует (потенциально) много разных возрастов и только одно неопределенное значение возвращается запросом.
Посмотрите мой ответ – xsami