Sql count:计算加入2个表的行数

时间:2013-05-29 11:22:00

标签: sql

让我们说我有两张桌子主人和奴隶。 主表包含master_name和master_id,从表包含Slave_id,slave_name和master_id。

样本数据。

master_id Master_name  Master_status      slave_id  slave_name  master_id status
1         x               online              1          a          1       online
2         y               online              2          b          1       online
3         z               offline             3          c          2       offline
                                              4          d          3       offline
                                              5          e          3       online

我想要获得的预期结果是,

master_id  no_of_slave
   1             2
   2             0

我希望得到每个在线大师都有的在线奴隶。

对于迟到的编辑感到抱歉。

7 个答案:

答案 0 :(得分:5)

像这样使用LEFT JOIN

SELECT m.master_id
     , count(s.slave_id) AS no_of_slave
FROM master m 
LEFT JOIN slave s 
     ON m.master_id = s.master_id
GROUP BY m.master_id;

结果:

╔═══════════╦═════════════╗
║ MASTER_ID ║ NO_OF_SLAVE ║
╠═══════════╬═════════════╣
║         1 ║           2 ║
║         2 ║           1 ║
║         3 ║           2 ║
╚═══════════╩═════════════╝

See this SQLFiddle

答案 1 :(得分:1)

使用以下查询:

Select m.master_id, count(s.master_id) as no_of_slave 
       FROM master m 
            JOIN slave s 
            ON m.master_id = s.master_id
            GROUP By m.master_id;

答案 2 :(得分:0)

select 
    a.master_id,
    count(b.slave_id) 
from 
    master a,
    slave b 
where 
     a.master_id=b.master_id 
group by 
     a.master_id

答案 3 :(得分:0)

select    master_id, count(1)
from      Slave
group by  master_id
order by  master_id

只会给你有奴隶的主人,如果桌子很大,你甚至不需要加入主人

答案 4 :(得分:0)

你可以用它。这将有效。

select m.master_id,(select count(*) from slave s where s.master_id = m.master_id) as no_of_slave from master m

答案 5 :(得分:0)

  SELECT master_id, count(*) AS no_of_slave
    FROM slave
GROUP BY master_id
ORDER BY master_id;

答案 6 :(得分:0)

您对主名称不感兴趣,因此不需要加入,您在Slave表中拥有所有必要的信息:

select master_id, count(slave_id) as no_of_slave
from Slave
group by master_id
order by master_id --remove this line, if ordering of master ids is not important
;

如果给定的主ID不在此结果中,则表示它没有从属。