SELECT FLOOR((EXTRACT(YEAR FROM FROM_DAYS(DATEDIFF(NOW(), birthday))) - 4) / 10) AS age, gender, COUNT(*)
FROM mytable
GROUP BY
age, gender
-1
в возрасте означает 0-4
, 0
означает 4-14
и т. Д.
Этот запрос может оставить пробелы, если в данной возрастной группе нет людей.
То же самое с процентами (от общей численности населения):
SELECT FLOOR((EXTRACT(YEAR FROM FROM_DAYS(DATEDIFF(NOW(), birthday))) - 4) / 10) AS age, gender,
COUNT(*) /
(
SELECT COUNT(*)
FROM mytable
)
FROM mytable
GROUP BY
age, gender