Mysql 通过连接3个表来计算行数

Mysql 通过连接3个表来计算行数,mysql,Mysql,我的问题如下所示 select count(au.agentId), count(mr.agentId) from agents a left join assignunits au on au.agentId=a.id left join assignmarketreport mr on mr.agentId=a.id where a.adminsId='0' and a.i

我的问题如下所示

select count(au.agentId), count(mr.agentId)
       from agents a
       left join assignunits au on au.agentId=a.id
       left join assignmarketreport mr on mr.agentId=a.id                        
       where a.adminsId='0' 
       and a.id='29' group BY `mr`.`agentId`, au.agentId ASC
我得到的
count(au.agentId)
值与
count(mr.agentId)
值相同

我想要什么:

对于下面的示例数据

分配单位

agentId     status
     2      Y
     2      Y
agentId     status
     2      Y
     2      Y
     2      Y
agentId     adminsId
     2      0
assignmarketreport

agentId     status
     2      Y
     2      Y
agentId     status
     2      Y
     2      Y
     2      Y
agentId     adminsId
     2      0
代理

agentId     status
     2      Y
     2      Y
agentId     status
     2      Y
     2      Y
     2      Y
agentId     adminsId
     2      0
现在
count(agentId先生)
应该返回
3

count(au.agentId)
应返回
2

请尝试以下操作

SELECT  b.totalAgentUnits, c.totalAgentReport
FROM    Agents a
        LEFT JOIN
        (
            SELECT agentID, COUNT(agentID) totalAgentUnits
            FROM assignunits
            GROUP BY agentID
        ) b ON a.agentID = b.agentID
        LEFT JOIN
        (
            SELECT agentID, COUNT(agentID) totalAgentReport
            FROM assignmarketreport
            GROUP BY agentID
        ) c ON a.agentID = c.agentID
试试下面的方法

SELECT  b.totalAgentUnits, c.totalAgentReport
FROM    Agents a
        LEFT JOIN
        (
            SELECT agentID, COUNT(agentID) totalAgentUnits
            FROM assignunits
            GROUP BY agentID
        ) b ON a.agentID = b.agentID
        LEFT JOIN
        (
            SELECT agentID, COUNT(agentID) totalAgentReport
            FROM assignmarketreport
            GROUP BY agentID
        ) c ON a.agentID = c.agentID

首先查询3个计数
计数(单位)、计数(市场端口)、计数(代理)
并将它们插入计数中

count(counts `count(units), count(marketport),count(agents)`)
之后,您可以设置一个php循环来获取每个数据并显示在每个表中

for($i=0;$count<3;$i++){
if($i==1){
//table 1
}
elseif($i==2){
//table 2
}
elsE{
//last table
}
}

对于($i=0;$count首先查询3个计数
计数(单位)、计数(市场端口)、计数(代理)
并将它们插入计数中

count(counts `count(units), count(marketport),count(agents)`)
之后,您可以设置一个php循环来获取每个数据并显示在每个表中

for($i=0;$count<3;$i++){
if($i==1){
//table 1
}
elseif($i==2){
//table 2
}
elsE{
//last table
}
}
对于($i=0;$count请尝试以下操作:

 select au_agentId,mr_agentId 
  from 
          (select a.agentId,count(au.agentId) as au_agentId  
           from   agents a
           left join assignunits au 
           on     au.agentId=a.agentId
           where  a.adminsId='0'
           group  by a.agentId )au
      join
      (select a.agentId,count(mr.agentId) as mr_agentId   
       from   agents a
           left join assignmarketreport mr 
           on    mr.agentId=a.agentId
           where a.adminsId='0'
           group by a.agentId)mr  
      on    au.agentId=mr.agentId       

试试这个:

 select au_agentId,mr_agentId 
  from 
          (select a.agentId,count(au.agentId) as au_agentId  
           from   agents a
           left join assignunits au 
           on     au.agentId=a.agentId
           where  a.adminsId='0'
           group  by a.agentId )au
      join
      (select a.agentId,count(mr.agentId) as mr_agentId   
       from   agents a
           left join assignmarketreport mr 
           on    mr.agentId=a.agentId
           where a.adminsId='0'
           group by a.agentId)mr  
      on    au.agentId=mr.agentId       


状态是相等还是不同?我的意思是,这是真实数据,还是只是一个随机示例?有点真实。我将获取状态为“Y”的数据状态是相等还是不同?我的意思是,这是真实数据,还是只是一个随机示例?有点真实。我将获取状态为“Y”的数据,获取一个错误
#1064-您的SQL系统中有一个错误ntax;查看与MySQL服务器版本对应的手册,以了解在“a.agentId=b.agentId LEFT JOIN”附近使用的正确语法(选择agentId,COUNT(a'在第8行
@Deepak再试一次,很抱歉输入错误。谢谢它现在可以工作了。如果我必须再添加一个与
assignunits
结构相同的表,我可以用left join来连接它吗?@Deepak是的,你可以这样做。出于某种原因,@Joe G Joseph answer为我工作,你的回答给了我不正确的结果。
注意:
我已经添加了select子查询中的ed
where
子句..获取错误
#1064-您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解在“a.agentId=b.agentId LEFT JOIN”附近使用的正确语法(选择agentId,COUNT(a'在第8行
@Deepak再试一次,很抱歉输入错误。谢谢它现在可以工作了。如果我必须再添加一个与
assignunits
结构相同的表,我可以用left join来连接它吗?@Deepak是的,你可以这样做。出于某种原因,@Joe G Joseph answer为我工作,你的回答给了我不正确的结果。
注意:
我已经添加了select子查询中的ed
where
子句..如果我在该子查询中添加了一个表怎么办?哪个表具有相同的结构?如果我在该子查询中添加了一个表怎么办?哪个表具有相同的结构?