UPDATE
Я определил значительно более сжатый и вычислительно оптимальный способ выражения этого утверждения. Нет подзапросов, нет многократных объединений.
SELECT
month(hire_date) as month,
sum(case when gender ="m" then 1 end) as male,
sum(case when gender ="f" then 1 end) as female,
count(*) as total
FROM employees
GROUP BY MONTH(hire_date)
Используя пример базы данных MySQL Employees , я дважды запрашиваю одну и ту же таблицу сотрудников через подзапрос и перекрестно объединяю результаты, чтобы получить сводную таблицу ниже. Я ищу, чтобы создать последний столбец, который будет сумма mcount
и fcount
Month,Gender,mcount,gender,fcount
'1','M','14310','F','9549'
'2','M','14659','F','9789'
'3','M','16200','F','10717'
'4','M','15363','F','10190'
'5','M','15545','F','10398'
'6','M','15000','F','10003'
'7','M','15260','F','10345'
'8','M','15250','F','10146'
'9','M','14632','F','9684'
Я снова попытался использовать подзапросы для создания этого столбца, но становится очевидным, что два моих подзапроса GROUP BY - неправильный способ построения этой сводной таблицы.
SELECT mbm.month, mbm.gender, mbm.count as mcount, fbm.gender, fbm.count as fcount
FROM
(SELECT MONTH(hire_date) as Month, gender, COUNT(*) as count
FROM employees
WHERE gender = "M"
GROUP BY gender,MONTH(hire_date)
) as mbm
CROSS JOIN (SELECT MONTH(hire_date) as Month, gender, COUNT(*) as count
FROM employees
WHERE gender = "F"
GROUP BY gender,MONTH(hire_date)
) AS fbm on mbm.Month = fbm.Month