Mysql 如何将聚合查询与不同的联接组合起来?

Mysql 如何将聚合查询与不同的联接组合起来?,mysql,sql,Mysql,Sql,我一直在研究和,试图找出如何在MySQL中进行组合聚合,但运气不太好 以下是我的两个问题: select a.IsTestAgency, a.ID, a.AgencyName, a.CreateDate, count(*) AS Agents from Users u join Agencies a on u.AgencyID = a.ID group by a.IsTestAgency, a.ID, a.AgencyName, a.CreateDate order by a.IsTestAge

我一直在研究和,试图找出如何在MySQL中进行组合聚合,但运气不太好

以下是我的两个问题:

select a.IsTestAgency, a.ID, a.AgencyName, a.CreateDate, count(*) AS Agents
from Users u
join Agencies a
on u.AgencyID = a.ID
group by a.IsTestAgency, a.ID, a.AgencyName, a.CreateDate
order by a.IsTestAgency, a.AgencyName;
结果:

以及:

结果:

您可以看到列和列的数据类型匹配。我想将它们组合到一个查询中,并排显示
代理
计数和
证书
计数,因为这是结果集中唯一两个不同的列值

怎么做的?这是你想要的吗

select a.*, 
       (select count(*)
        from users u
        where u.AgencyID = a.ID
       ) as users_count,
       (select count(*)
        from Certificates c
        where c.AgencyID = a.ID
       ) as certificates_count
from Agencies a
order by a.IsTestAgency, a.AgencyName;

您可以通过
JOIN
ing到
COUNT
s的表来实现这一点:

select a.IsTestAgency, a.ID, a.AgencyName, a.CreateDate, u.Agents, c.Certs
from Agencies a
join (select AgencyID, COUNT(*) as Agents from Users group by AgencyID) u on u.AgencyID = a.ID
join (select AgencyID, COUNT(*) as Certs from Certficates group by AgencyID) c on c.AgencyID = a.ID
order by a.IsTestAgency, a.AgencyName;

这样就不需要在顶部查询中按分组,也不用为输出的每一行进行两个子查询计数。

@BobJarvis。一点也不。那不应该在那里。
select a.IsTestAgency, a.ID, a.AgencyName, a.CreateDate, u.Agents, c.Certs
from Agencies a
join (select AgencyID, COUNT(*) as Agents from Users group by AgencyID) u on u.AgencyID = a.ID
join (select AgencyID, COUNT(*) as Certs from Certficates group by AgencyID) c on c.AgencyID = a.ID
order by a.IsTestAgency, a.AgencyName;