Получение общей (суммы) сотрудников, работающих под управлением женщин-руководителей - sqlite - PullRequest
0 голосов
/ 10 октября 2019

У меня есть условие, при котором я должен показывать всех сотрудников под руководством женщин. Поэтому я написал этот запрос.

select count(E.emp_id) as EmployeeCount, M.name, M.gender   
from employee E Join employee M on M.emp_id = E.manager_id 
where M.gender ='Female' group by M.name, M.gender  

Приведенный выше запрос возвращает

4   Camila Wolstenholme Female
7   Clemmy Lamberts Female
9   Janot Saxon Female
3   Tina Fain   Female  

Но я хочу, чтобы сотрудники работали под руководством каждой женщины-менеджера и сумма сотрудников, работавших под руководством всех женщин-руководителей, то есть 4 + 7 + 9 +3 = 23. Я хочу, чтобы 23 были показаны вместе с сотрудниками, работающими под руководством каждой женщины-менеджера. Как я могу это сделать

1 Ответ

2 голосов
/ 10 октября 2019

Я считаю, что следующее может делать то, что вы хотите: -

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 */

Результат

enter image description here

  • 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'),'','',''
;

Результат

enter image description here

...