Я считаю, что следующее может делать то, что вы хотите: -
SELECT
(SELECT count() FROM employee ee JOIN employee mm ON mm.emp_id = ee.manager_id WHERE m.gender = 'Female' ) AS Total ,
count(E.emp_id) as EmployeeCount, M.name, M.gender,
group_concat(e.name)
FROM employee AS E
JOIN employee M on M.emp_id = E.manager_id
WHERE M.gender ='Female' group by M.name, M.gender
Пример / Демо
DROP TABLE IF EXISTS employee;
CREATE TABLE IF NOT EXISTS employee (emp_id INTEGER PRIMARY KEY, name TEXT ,gender TEXT, manager_id INTEGER);
INSERT INTO employee (name,gender,manager_id) VALUES
('Camila Wolstenholme', 'Female',null),
('Clemmy Lamberts','Female',null),
('Janot Saxon','Female',null),
('Tina Fain','Female',null),
('Fred Bloggs','Male',1),
('Anne Smith', 'Female',1),
('Sarah Thompson','Female',1),
('Trudy Mann','Female',1),
('Jane X','Female',2),
('Audrey Wood','Female',2),
('Mary Bartman','Female',2),
('Teresa Owens','Female',2),
('Amanda Jones','Female',2),
('Sophie Alexander','Female',2),
('Andrea Turner','Female',2),
('Jessica Walsh','Female',3),
('Suzy Quertermain','Female',3),
('Alanah Taylor','Female',3),
('Catherine Wilkinson','Female',3),
('Rose Dennis','Female',3),
('Debbie Waterford','Female',3),
('Elaine Bywaters','Female',3),
('Farah Flannagan','Female',3),
('Gina Heartman','Female',3),
('Helen Inglis','Female',4),
('Ingrid Sachs','Female',4),
('Julie Zimmerman','Female',4),
('Frank Smith','Male',null) /* Male Manager */
;
SELECT
(SELECT count() FROM employee ee JOIN employee mm ON mm.emp_id = ee.manager_id WHERE m.gender = 'Female' ) AS Total ,
count(E.emp_id) as EmployeeCount, M.name, M.gender,
group_concat(e.name) AS Manages
FROM employee AS E
JOIN employee M on M.emp_id = E.manager_id
WHERE M.gender ='Female' group by M.name, M.gender
;
DROP TABLE IF EXISTS employee; /* Cleanup Environment */
Результат
- NULL использовался для указания менеджера при отсутствии указания на то, что отличает менеджера.
Дополнительно
Однако показ итогов для каждого столбца может сбить с толку, возможно ли показать его в виде одной строки?
В следующем примере он будет показан как одна строка со всеми другими значениями. То есть a) столбец итогов не извлекается, а вместо этого через UNION добавляется строка с итоговым значением в первом столбце, а остальные столбцы отбрасываются.
SELECT
/* (SELECT count() FROM employee ee JOIN employee mm ON mm.emp_id = ee.manager_id WHERE m.gender = 'Female' ) null AS Total ,*/
count(E.emp_id) as EmployeeCount, M.name, M.gender,
group_concat(e.name) AS Manages
FROM employee AS E
JOIN employee M on M.emp_id = E.manager_id
WHERE M.gender ='Female' group by M.name, M.gender
UNION SELECT (SELECT count() FROM employee ee JOIN employee mm ON mm.emp_id = ee.manager_id WHERE mm.gender = 'Female'),'','',''
;
Результат