2015-01-31 3 views
0

У меня возникли трудности с 3-мя табличными запросами.3 запроса таблицы с подсчетом

Сценарий является то, что TEAM имеет много или нет MEMBERS, MEMBER не могло быть много или нет TASKS. Я хочу получить число TASKS за каждые TEAM. TEAM имеет свои собственные ID, MEMBER сохраняет это как FK на TEAM_ID, TASK имеет MEMBER_ID на TASK.

Я хочу, чтобы получить отчет о TEAM.NAME, COUNT (Person/Team), граф (задачи/команды)

Я сам так растерялся, мое мышление было использовать внешнее соединение на ТИМ и ЧЛЕНА поэтому у меня есть все команды с любыми членами, которые у них есть. Отсюда я совершенно смущен. Если кто-то может просто мне точку в правильном направлении, так что у меня есть что-то, чтобы работать от Я бы так greateful

+0

Если вы предоставите образцы таблиц и ожидаемой таблицы результатов, которые будут достаточно много! :-) – Alex

ответ

1

Вы хотите использовать count distinct:

MySQL COUNT DISTINCT

select t.name as Team, 
    count(distinct m.ID) as Member_cnt, 
    count(distinct t.ID) as Task_cnt 
from team t 
    left join member m 
     on t.ID= m.TEAM_ID 
    left join tasks t 
    on t.MEMBER_ID= m.ID 
group by t.name; 
+1

Спасибо! Я дошел до того, что левый присоединился раньше, я отсутствовал в группе и считал отличным вместо простого подсчета! – user3240957

1

Я думаю, что вы можете делать то, что вы хотите с агрегацией - и count(distinct):

select t.name, 
     count(distinct m.memberid) as nummembers, 
     count(distinct tk.taskid) as numtasks 
from team t left join 
    member m 
    on t.teamid = j.teamid left join 
    tasks tk 
    on tk.memberid = m.memberid 
group by t.name; 
1

Try это:

SELECT Team.name, COUNT(Person.id_person), COUNT(Tasks.id_task) 
FROM Team t, 
LEFT JOIN Person p on p.team_id = t.id_team 
LEFT JOIN Tasks ts on ts.person_id = p.id_person 
GROUP BY p.team_id, ts.person_id 
Смежные вопросы