2014-01-30 4 views
1

Я пытаюсь выяснить, сколько отчетов каждый менеджер имеет в организации, но не может заставить его работать для меня.Найти всех детей для каждого родителя

Ниже приведен пример набора данных - все это в пределах одной таблицы, а каждая строка имеет менеджер, за исключением первого, который в верхней части дерева:

ID Manager 
1 NULL 
2 1 
3 2 
4 3 
5 3 
6 5 
7 5 
8 5 
9 5 
10 3 

мне нужен результат, чтобы выйти, как:

Manager Count 
1  1 
2  1 
3  3 
5  4 

Это то, что я до сих пор, но это не дает мне то, что мне нужно:

select e1.manager, count(e3.id) as emp_count 
    from employee as e2 
left outer 
    join employee as e1 
    on e1.manager = e2.id 
left outer 
    join employee as e3 
    on e3.manager = e1.id 
group 
    by e1.manager 

ответ

3

Почему у вас есть так много внешних соединений?

select e1.manager, count(e1.id) as emp_count 
from employee as e1 
where e1.manager is not null 
group by e1.manager 

Из представленных данных вы не имеете никакого отношения к «родителям и детям» в своем вопросе. Это очень простой агрегат. Если это не так, обновите свой вопрос с помощью более качественных данных.

+0

Я взял пример я нашел в Интернете и попытался изменить его для моих требований - родитель/ребенок, вероятно, не правильный способ определить это, но я был думая, что каждый менеджер является родителем, а их отчеты - это дети. В любом случае это работает так благодарно – bhttoan

+0

Просто, чтобы вы знали, когда мы говорим «родитель/ребенок», мы обычно ссылаемся на вложенные отношения, например, когда менеджеры имеют менеджеров менеджеров. – miyasudokoro

0

Я думаю, что это так просто, как это:

select manager, count(manager) 
from employee 
where manager is not null 
group by manager 
+0

У вас есть опечатка. 'count (manager)', когда группировка менеджером даст вам счет 1 каждый раз. :) – miyasudokoro

+0

Он работал в T-SQL, но вы правы, вопрос в MySQL, поэтому ответ может быть другим. Тем не менее, я все равно удивлюсь, так как результаты сгруппированы менеджером. – BrettFromLA

+0

Если вы группируете по менеджеру, то есть один менеджер для каждой группы. Счет для каждой группы. Следовательно, количество одного менеджера на группу равно единице. Я обязательно буду держаться подальше от T-SQL, чтобы избежать каких-либо странных безумств в чем-либо другом. :) – miyasudokoro

Смежные вопросы