MySQL-如何按组对计数求和

MySQL-如何按组对计数求和,mysql,join,count,group-by,Mysql,Join,Count,Group By,我有三个与以下关系相关的表: "agency" 1-n "agent" 1-n "ad" (agency has many agents and each agent has many ads) 我想得到一份按机构划分的广告数量列表,如下所示: agency_name | ad_count --------------------------- agency 1 | 15 agency 2 | 25 agency 3 | 0 即

我有三个与以下关系相关的表:

"agency" 1-n "agent" 1-n "ad" 
(agency has many agents and each agent has many ads)
我想得到一份按机构划分的广告数量列表,如下所示:

agency_name   |   ad_count
---------------------------
agency 1      |     15
agency 2      |     25
agency 3      |     0

即使是广告为0的机构也会出现。这可能吗?非常感谢

因为您没有提供确切的表结构,所以我不得不猜测一下

select agency.agency_name, 
       count(ad.id) as ad_count
from agency 
left outer join agent on agency.id = agent.agency_id
left outer join ad on ad.id = agent.ad_id
group by agency.agency_name
试试这个:

SELECT a.agencyname, IFNULL(b.adcnt, 0) adcount  
FROM agency 
LEFT JOIN (SELECT a.agencyid, SUM(adcnt) adcnt 
           FROM agent a 
           INNER JOIN (SELECT agentid, COUNT(agentid) adcnt 
                       FROM ad 
                       GROUP BY agentid
                      ) b ON a.agentid = b.agentid 
           GROUP BY agencyid) b ON a.agencyid = b.agencyid


回答很好,但是对于没有广告的机构,也可以使用“coalesce()”将null替换为零,这不是很好吗?不在
计数中。如果没有
ad.id
就不算了,非常感谢您抽出时间,因为我对SQL没有太多经验,我从您的回答中学习到,检查了与第一个答案的差异,这与我的表结构也相匹配-很抱歉,我没有从一开始就提供更多信息。谢谢,这做得很完美-非常简单和清晰,我从中学到了!特别是在向我介绍SqlFiddle时,我觉得这一定是一个非常常见的问题——有没有更好的标题可以帮助其他人更容易地找到这个问题?
select agency.agency_name, count(ad.id)
from agency
left join agent on agent.agency_id = agency.id
left join ad on ad.agent_id = agent.id
group by agency.agency_name