Mysql 如何将聚合查询与不同的联接组合起来?
我一直在研究和,试图找出如何在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
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;