Я отвечу SQL примерами. Я не знаю, как приведенный выше код работает в PHP, но из-за группы "BIRTH_DATE" вы получите более одной строки на возраст, и это может быть проблемой при возврате.
Если бы я понял, что вам нужно SUM over count (*), но если запрос не используется повторно где-либо и вам не нужно count per Birth_date, вы просто можете удалить группу by из конструкции запроса.
См. ниже,
create table StaffEmployment
( name varchar2(100)
, gender varchar2(10)
, job_cadre varchar2(50)
, birth_date date
);
----------------------------------------------------------------------
insert all
into staffemployment(name,gender,job_cadre,birth_date)
values('A','M','Acdemic',sysdate-(45*365))
into staffemployment(name,gender,job_cadre,birth_date)
values('B','M','Acdemic',sysdate-(45*365))
into staffemployment(name,gender,job_cadre,birth_date)
values('C','F','Acdemic',sysdate-(70*365))
into staffemployment(name,gender,job_cadre,birth_date)
values('D','F','Acdemic',sysdate-(10*365))
SELECT * FROM dual;
----------------------------------------------------------------------
select t.*,TRUNC(months_between(sysdate, BIRTH_DATE) / 12) age
from StaffEmployment t;
----------------------------------------------------------------------
NAME GENDER JOB_CADRE BIRTH_DAT AGE
----- ---------- ---------- --------- ----------
A M Acdemic 13-AUG-75 44
B M Acdemic 13-AUG-75 44
C F Acdemic 19-AUG-50 69
D F Acdemic 04-AUG-10 9
----------------------------------------------------------------------
select BIRTH_DATE,count(*)
from StaffEmployment t
where TRUNC(months_between(sysdate, BIRTH_DATE) / 12) >= 40
and TRUNC(months_between(sysdate, BIRTH_DATE) / 12) < 70
group by BIRTH_DATE;
----------------------------------------------------------------------
BIRTH_DAT COUNT(*)
--------- ----------
13-AUG-75 2
19-AUG-50 1
----------------------------------------------------------------------
And if we do a sum you get the actual count over all rows
----------------------------------------------------------------------
select SUM(count(*)) teacing_count
from StaffEmployment t
where TRUNC(months_between(sysdate, BIRTH_DATE) / 12) >= 40
and TRUNC(months_between(sysdate, BIRTH_DATE) / 12) < 70
group by BIRTH_DATE;
----------------------------------------------------------------------
TEACING_COUNT
-------------
6