2016-08-26 4 views
1

Мои данные:Подсчет и выбор данных из двух таблиц

STAFF 
(id, name,outlet) 
===================== 
(1, 'John','WA'), 
(2, 'Mary', 'WA'), 
(3, 'Wilson', 'PH'), 
(4, 'James', 'NY'), 

OUTLET  
(name, supervisorid) 
============ 
('WA', 2), 
('PH', 3), 
('NY', 4), 

Ищу для следующего

outlet,supervisorname,noofstaffinoutlet 
WA,John,2 
PH,Wilson,1 
NY,James,1 

я в состоянии посчитать не персонала с использованием

select s.outlet ,count(s.outlet) from STAFF s group by s.outlet; 

Как добавить имя супервизора в розетку?

Я попытался добавить в STAFF.id = OUTLET.superviorid, но если я делаю это мой граф становится 1.

ответ

1

Соединиться с staff дважды.

SELECT o.name AS outlet, s1.name AS supervisorname, IFNULL(COUNT(s2.id), 0) AS nooffstaffinoutlet 
FROM outlet AS o 
JOIN staff AS s ON o.supervisorid = s.id 
LEFT JOIN staff AS s2 on o.name = s2.outlet 

Использование LEFT JOIN и IFNULL() позволяет запрос показать 0 для точек, не имеющих персонала.

1

Вы можете присоединиться к розетке с персоналом дважды - один раз, чтобы получить супервизор идентификатор и один раз в агрегированном запросе, чтобы получить количество сотрудников:

SELECT o.name, s.name, c.cnt 
FROM outlet o 
JOIN staff s ON s.id = o.supervisorid 
JOIN (SELECT outlet, COUNT(*) AS cnt 
     FROM  staff 
     GROUP BY outlet) c ON c.outlet = o.name 
Смежные вопросы