Iam对此SQL查询有些困惑。我有两张桌子

TbleName - usrs                     TbleName - idtb

name  |  cid                      cname   |   cid
-------------                     ----------------
james |  1100                      IT     |   1100
john  |  1200                      HR     |   1300
jack  |  1100                      QA     |   1200
bill  |  1300                      HD     |   1400
troy  |  1100


SELECT COUNT(*) as 'Total' FROM usrs u WHERE u.cid = 1100;

SELECT c.cname FROM idtb c WHERE c.cid = 1100;


我的第一个查询返回3,第二个查询返回IT,现在我想将这2个查询合并为一个查询,结果如下

        Total   |   Cname
        ------------------
          3     |    IT


我尝试了几种方法,这有效

    SELECT COUNT(*) as 'Total',c.cname FROM usrs u JOIN
    idtb c ON u.cid = c.cid WHERE u.cid = 1100
    GROUP BY u.cid


但是,当u.cid = 1400时,该查询似乎不起作用,因为在usrs表中没有cid值为1400的名称,并且它返回空结果,但我希望结果为

        Total   |   Cname
        -------------------
          0     |    HD


如果usrs中没有记录,该查询将不起作用。我尝试使用左,右和完全联接,但没有弄清楚。任何帮助是极大的赞赏。

最佳答案

当您要打印所有cname但要计数usrs时,这是您需要的查询:

select a.cname, count(b.name)
  from idtb a left join usrs b on (a.cid = b.cid)
 group by a.cname


如果要为某些过滤器添加过滤器,只需添加where子句。

在小提琴上看到它:http://sqlfiddle.com/#!2/0acec/2

关于mysql - 在两个表上计数(*),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23633763/

10-09 08:57