2009-08-23 7 views
18

Oto moja kwerenda wybierająca:W jaki sposób można utworzyć zapytanie SUM MySQL zero zamiast wartości zerowej, jeśli nie ma rekordów?

SELECT SUM(rating) AS this_week 
FROM table_name 
WHERE UNIX_TIMESTAMP(created_at) >= UNIX_TIMESTAMP() - 604800) 

które zasadniczo zlicza ratingu elementu dla ostatniego tygodnia (604800 to liczba sekund w ciągu 1 tygodnia).

Problem polega na tym, że gdy nie ma żadnych wierszy w tabeli, this_week zostanie zwrócony jako NULL. Chciałbym, aby zapytanie zwróciło 0 w przypadku, gdy nie ma żadnych wierszy w tabeli. Jak to zrobić?

Odpowiedz

41

To powinno załatwić sprawę:

SELECT COALESCE(SUM(rating),0) AS this_week FROM table_name 
    WHERE UNIX_TIMESTAMP(created_at) >= UNIX_TIMESTAMP() - 604800) 

COALESCE to funkcja zwróci wartość NULL pierwszy niekomunistyczny z listy.

+0

Dziękuję, to zrobiło dokładnie to, czego potrzebowałem :) –

9

Nie możesz użyć ISNULL(SUM(rating), 0)?

+7

Myślę, że masz na myśli 'IFNULL' dla MySQL. –

+0

To rozwiązanie pasuje lepiej niż zaakceptowana odpowiedź podczas korzystania z rekordów aktywnych CI. Dzięki – eNeMetcH

Powiązane problemy