2010-12-07 19 views
1

Wie kann ich meine Abfrage ändern, um 0 zurückzugeben, wenn count (*) NULL ist?Rückgabe Null, wenn Anzahl (*) NULL ist

select monthname(timestamp), year(timestamp), count(*) 
from largehits 
where largeID = someid 
    and (month(timestamp)<=somemonth 
    and month(timestamp)>=somemonth 
    and year(timestamp)<=someyear 
    and year(timestamp)>=someyear) 
group by month(timestamp), year(timestamp) 
order by timestamp asc 

Vielen Dank!

+6

'COUNT()' kann niemals NULL zurückgeben. – BoltClock

+0

Meinst du das anders herum? NULL zurückgeben, wenn COUNT() 0 zurückgibt? Ein einfacher CASE würde das für Sie tun. Ich weiß nicht, was der Grund dafür wäre, das zu tun. – manneorama

+1

Ich denke, was Sie eher treffen werden ist, dass die Monat/Jahr-Kombination nicht existiert, so dass Sie eine fehlende Zeile bekommen? – Basic

Antwort

2

BoltClock macht einen guten Punkt in den Kommentaren, COUNT kann nie NULL sein.

Im Allgemeinen würden Sie nur COALESCE(expression,0) für diese Art von Problem verwenden.

Bearbeiten: Nach der Klärung in den Kommentaren müssen Sie eine outer join in einer Tabelle Nummern verwenden, um den gewünschten Effekt zu erhalten.

+0

Können Sie die äußere Verbindung näher erläutern? –

+0

Sicher. Es ist im Grunde das gleiche Problem wie [diese Frage] (http://stackoverflow.com/questions/3538858/mysql-how-to-fill-missing-dates-in-range/3538926#3538926) –

Verwandte Themen