3 带计数的表查询
Posted
技术标签:
【中文标题】3 带计数的表查询【英文标题】:3 table query with count 【发布时间】:2015-01-31 00:01:00 【问题描述】:我在使用 3 表查询时遇到了很大的困难。
场景是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 上使用外部加入,这样我就拥有了所有团队以及他们拥有的任何成员。从这里我完全糊涂了。如果有人能指出我正确的方向,这样我就有工作要做,我会非常高兴
【问题讨论】:
如果您提供表格样本和预期结果表格,那将大有帮助! :-) 【参考方案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;
【讨论】:
谢谢!之前我已经达到了左连接,我错过了 group by 和 count distinct 而不是简单的计数!【参考方案2】:我认为你可以通过聚合来做你想做的事——还有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;
【讨论】:
【参考方案3】:试试这个:
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
【讨论】:
以上是关于3 带计数的表查询的主要内容,如果未能解决你的问题,请参考以下文章