使用mysql group by显示计数为0的行
我在MySql中有两个表 公司:(cname,城市) 工作:(姓名、姓名、薪水) 我想显示每个公司的员工人数, 即使这个数字是零 例如。 为了 输出应为:使用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
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;