mysql - 在两个表上计数 (*)

标签 mysql sql

我对这个 sql 查询有点困惑。我有两张 table

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 子句即可。

在 fiddle 上查看:http://sqlfiddle.com/#!2/0acec/2

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

相关文章:

php - 为什么对已经存在的标准函数使用自定义 sql 函数?

mysql - 从一个表中选择多个列,从另一个表中获取相应的详细信息并将其插入到另一个表中

mysql - 如何避免重复的列值

MySQL 正向工程

sql - RDBMS 或 NoSQL 用于具有循环和有序操作的复杂计划数据?

c# - 针对列截断数据,但截断的数据是空的 C#/MySql

java - 如何使用mybatis注释将简单数组插入表字段

Java 给出 00 :00:00 time when gathering dateTime from MySQL

php - 在 php 中连接到数据库的最佳方法是什么?

sql - 使用外键,我可以在复合主键中引用固定值吗?