2015-01-11 20 views
0

所以我有3個表:選擇即使數= 0的MySQL

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) 

我都數不過來的事故從一月1,2014每個車型的數量,而且還必須選擇汽車行駛數0(從01年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; 
+3

那麼,什麼是「M」? – Strawberry

回答

0

你清楚地說明你只想與意外行:

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

只需添加一個OR條款,允許記錄,其中a._date IS NULL

0

可以使用條件彙總:

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 join秒 - 以防萬一某些型號沒有意外可言。

0

我遇到了同樣的問題,我花了很長時間才弄明白。 事實證明,如果集合全爲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