使用mysql group by显示计数为0的行

使用mysql group by显示计数为0的行,mysql,group-by,Mysql,Group By,我在MySql中有两个表 公司:(cname,城市) 工作:(姓名、姓名、薪水) 我想显示每个公司的员工人数, 即使这个数字是零 例如。 为了 输出应为: Microsoft 2 IBM 0 但以下查询和其他类似查询仅打印 至少有一名员工的公司: Select count(*) from works natural join company group by company.cname 如果我使用外部联接,那么零员工的公司仍然会显示 上一行,因此该选项也被取消 怎么做?试试看 Select

我在MySql中有两个表 公司:(cname,城市) 工作:(姓名、姓名、薪水)

我想显示每个公司的员工人数, 即使这个数字是零

例如。 为了

输出应为:

Microsoft 2
IBM 0
但以下查询和其他类似查询仅打印 至少有一名员工的公司:

Select count(*) from works natural join company group by company.cname
如果我使用外部联接,那么零员工的公司仍然会显示 上一行,因此该选项也被取消

怎么做?

试试看

Select company.cname, count(work.id) from company left join work on ....=.... group by company.cname

填写“…”部分,并将work.id更改为您的姓名

左连接的经典案例:

SELECT
  c.cname,
  COUNT(w.ename) wcount 
FROM
  company c
  LEFT JOIN works w ON c.cname = w.cname
GROUP BY
  c.cname

使用子查询还有另一种方法,下面是我案例中的一个示例:

select count(`order_id`) as cnt
from (
    select `order_id` from `room_bookings`
    where `room_id` = 3 and `day_id` = 20180201 
    group by `order_id`
) as b;

附言:你应该放弃自然连接。它们看起来很方便,但实际上并不有用。它们削弱了您的表达能力,并对如何设计数据库(列命名)产生了影响,这对我来说是一个很大的WTF。
select count(`order_id`) as cnt
from (
    select `order_id` from `room_bookings`
    where `room_id` = 3 and `day_id` = 20180201 
    group by `order_id`
) as b;