3 table 查询次数
3 table query with count
我在处理 3 table 查询时遇到了很大的困难。
情况是 TEAM
有很多或没有 MEMBERS
,MEMBER
可能有很多或没有 TASKS
。我想得到的是每个 TEAM
的 TASKS
的数量。 TEAM
有自己的 ID
,MEMBER
在 TEAM_ID
上将其作为 FK,TASK
在 TASK
上有 MEMBER_ID
。
我想获取 TEAM.NAME、COUNT(Person/Team)、Count(Tasks/Team)
的报告
我自己很困惑,我的想法是在 TEAM 和 MEMBER 上使用 Outer Join,这样我就拥有了所有团队及其拥有的任何成员。从这里我变得完全困惑。如果有人能给我指出正确的方向,这样我就有工作可做,我会非常感激
我认为您可以通过聚合来做您想做的事 -- 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;
试试这个:
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
您想使用 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;
我在处理 3 table 查询时遇到了很大的困难。
情况是 TEAM
有很多或没有 MEMBERS
,MEMBER
可能有很多或没有 TASKS
。我想得到的是每个 TEAM
的 TASKS
的数量。 TEAM
有自己的 ID
,MEMBER
在 TEAM_ID
上将其作为 FK,TASK
在 TASK
上有 MEMBER_ID
。
我想获取 TEAM.NAME、COUNT(Person/Team)、Count(Tasks/Team)
的报告我自己很困惑,我的想法是在 TEAM 和 MEMBER 上使用 Outer Join,这样我就拥有了所有团队及其拥有的任何成员。从这里我变得完全困惑。如果有人能给我指出正确的方向,这样我就有工作可做,我会非常感激
我认为您可以通过聚合来做您想做的事 -- 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;
试试这个:
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
您想使用 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;