【问题标题】:Select even if count=0 mysql即使count=0 mysql也选择
【发布时间】:2015-03-09 10:55:17
【问题描述】:

所以我有 3 张桌子:

 accident, involve and car. 
 Car (registration_nr, model,year)
 involve (licence_nr,registration_nr (FK of car), raport_nr (FK of accident))
 accident(raport_nr, date)

我必须计算从 2014 年 1 月 1 日起每种车型的事故数量,但还必须选择计数为 0 的汽车(从 2014 年 1 月 1 日起没有发生事故的汽车)这是困难的部分我,到现在我只能选择那些发生事故的人。

Select c.model,count(m.registration_nr)
from car as c
join involve as i
on i.registration_nr=c.registration_nr
join  accident as a
on i.raport_nr=a.raporti_nr 
where a._date between '2014-01-01' and curdate() 
group by c.model;

【问题讨论】:

    标签: mysql sql date count


    【解决方案1】:

    您明确表示您只想要有事故的行:

    where a._date between '2014-01-01' and curdate() 
    

    只需添加一个OR 子句以允许记录a._date IS NULL

    【讨论】:

      【解决方案2】:

      您可以使用条件聚合:

      Select c.model, sum(a._date between '2014-01-01' and curdate() )
      from car c left join
           involve i
           on i.registration_nr = c.registration_nr left join
           accident a
           on i.raport_nr = a.raporti_nr 
      group by c.model;
      

      我还添加了left joins——以防万一某些型号完全没有事故。

      【讨论】:

        【解决方案3】:

        我遇到了同样的问题,我花了很长时间才弄清楚。 事实证明,如果集合全为 NULL,聚合函数 COUNT 将返回 0。所以这里是你将如何提出查询:

        SELECT model, COUNT(registration_nr)
        FROM car LEFT JOIN (involve NATURAL JOIN accident) USING (registration_nr)
        WHERE date > '01-01-2014' OR date IS NULL
        GROUP BY model
        

        在我的例子中,输出会是这样的:

        Model     Count
        Mazda     1
        Honda     0
        

        【讨论】:

          猜你喜欢
          • 2013-03-20
          • 1970-01-01
          • 2017-11-30
          • 1970-01-01
          • 2012-04-13
          • 1970-01-01
          • 1970-01-01
          • 2018-10-28
          • 2012-12-08
          相关资源
          最近更新 更多