In this case, you can use a subquery:
SELECT COUNT(*), CASE WHEN age >=10 AND age <=20 THEN '10-20' WHEN age >=21 AND age <=30 THEN '21-30' WHEN age >=31 AND age <=40 THEN '31-40' WHEN age >=41 AND age <=50 THEN '41-50' WHEN age >=51 AND age <=60 THEN '51-60' WHEN age >=61 THEN '61+' END AS ageband FROM ( DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(date_of_birth, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(date_of_birth, '00-%m-%d')) AS age, .. .. ) as tbl GROUP BY ageband;
So, he first performs a subquery and builds an age table, which aggregates the age value.
Stefaan colman
source share