3 带计数的表查询

Posted

技术标签:

【中文标题】3 带计数的表查询【英文标题】:3 table query with count 【发布时间】:2015-01-31 00:01:00 【问题描述】:

我在使用 3 表查询时遇到了很大的困难。

场景是TEAM 有很多或没有MEMBERSMEMBER 可能有很多或没有TASKS。我想要得到的是每个TEAMTASKS 的数量。 TEAM 有自己的 IDMEMBERTEAM_ID 上将其作为 FK,TASKTASK 上拥有 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 带计数的表查询的主要内容,如果未能解决你的问题,请参考以下文章

SQL查询加入不同的表和计数

在 SQL 中使用 3 列计数查询

查询带外键的表

计数,加入查询

Postgresql 选择计数查询需要很长时间

在一个查询 MYSQL 上从 2 个不同的表中计算 2 个不同的东西