【问题标题】:Displaying rows with count 0 with mysql group by使用mysql group by显示计数为0的行
【发布时间】:2009-04-13 09:37:57
【问题描述】:

我在 MySql 中有两个表 公司 : (cname,city) 作品 : (ename,cname,salary)

我想显示为每家公司工作的员工人数, 即使那个数字为零。

例如 对于

Company : 
Microsoft Bangalore
IBM       NY

works : 
emp1 Microsoft 10000
emp2 Microsoft 90000

输出应该是:

Microsoft 2
IBM 0

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

Select count(*) from works natural join company group by company.cname

如果我使用外部联接,那么员工为零的公司仍然会显示 排成一排,所以这个选项也没有了。

怎么做?

【问题讨论】:

    标签: mysql group-by


    【解决方案1】:

    LEFT JOIN 的经典案例:

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

    【讨论】:

    • P.S.:您应该转储 NATURAL JOIN。它们似乎很方便,但它们并不是真的有用,恕我直言。它们削弱了你的表达能力,它们对如何设计你的数据库(列命名)产生了影响,这对我来说是一个很大的 WTF。
    【解决方案2】:

    试试

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

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

    【讨论】:

      【解决方案3】:

      子查询还有另一种方法,这是我的例子:

      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;
      

      【讨论】:

        猜你喜欢
        • 2011-09-10
        • 1970-01-01
        • 2023-01-02
        • 2010-11-02
        • 2011-04-05
        • 2010-12-11
        • 2023-04-01
        • 1970-01-01
        • 2014-07-26
        相关资源
        最近更新 更多