2010-08-15 16 views
5

Próbuję policzyć zapisy w moim stole i pogrupować je według daty. Mój obecny zapytanie wygląda mniej więcej tak:Mysql: Policz rekordy (w tym zero) na miesiąc

SELECT 
    count(*), 
    MONTH(time) as month, 
    YEAR(time) as year 
FROM 
    myTable 
GROUP BY 
    month, year 
ORDER BY 
    year, month 

To działa, oprócz tego, że chciałbym również, aby uzyskać liczbę miesięcy, w których istnieje żadne zapisy.

Czy ktoś może zaoferować porady/sugestie, jak to osiągnąć?

Odpowiedz

2

Najprostszym sposobem zrobienia tego w MySQL jest utworzenie tabeli o nazwie months, która zawiera listę wszystkich miesięcy, w których jesteś zainteresowany i używa LEWEGO DOŁĄCZENIA do swojego stołu.

SELECT 
    YEAR(time) AS year 
    MONTH(time) AS month, 
    COUNT(myTable.year) AS cnt, 
FROM months 
LEFT JOIN myTable 
    ON months.year = myTable.year 
    AND months.month = myTable.month 
GROUP BY months.year, months.month 
ORDER BY months.year, months.month 

Jednak ponieważ jest to głównie kwestia prezentacji często łatwiej jest po prostu uruchomić kwerendę jak już robisz i przekształcić wynik w kliencie (np PHP).

Powiązane problemy