2012-08-16 106 views
2

考慮以下pageviews(左)和daterange(右)表:如何計算MySQL中每月每天的綜合瀏覽量?

_date  pageviews  _date 
---------------------  ---------- 
2011-01-01 21331   2011-01-01 
2011-01-02 32143   2011-01-02 
2011-01-04 23434   2011-01-03 
.       . 
.       . 
2011-08-30 32322   2011-08-30 

表包含與相應的網站瀏覽量的日期。請注意,有幾天沒有任何瀏覽量(如2011-01-03)。

我需要的是一個查詢來統計每月每天的瀏覽量總數。因此,應該將januari 1st + februari 1st + ... + 11月1日的綜合瀏覽量作爲第一個值,然後將januari 2 + februari 2 + ... februari 3作爲第二個值。查詢的輸出因此是31天(編號爲1到31)以及相應的瀏覽量總數。

我不知道如何開始。我創建了一個daterange表,其中包含2011-01-012011-08-30之間的所有日期,以便能夠CAOLESCE並在pageviews表中缺失的天數返回0。但我從那裏開始相當迷茫。

你知道如何解決這個問題嗎?任何幫助:-)

+0

查看sundar的答案,並且根本不需要第二個表格。 谷歌「SQL日期函數」 – 2012-08-16 11:15:41

回答

3
SELECT DAY(_date),SUM(pageviews) FROM pageviews GROUP BY DAY(_date) 

希望上面的查詢會解決這個問題。

+2

這不會給你沒有瀏覽量的日子。 – 2012-08-16 11:17:29

+0

@MyOtherMe這個月的某個特定的日子有多少可能不會在一段(長期)時間內看到?沒有人在每年的每個月的13號查看您的網頁?爲什麼? – 2012-08-16 11:20:10

+0

我認爲OP提到它說「注意有幾天沒有任何瀏覽量」。 – Omesh 2012-08-16 11:22:07

2

極大的讚賞,我認爲這是你在找什麼:

SELECT a._date, SUM(IFNULL(b.pageviews, 0)) AS total_pageviews 
FROM daterange a 
    LEFT JOIN pageviews b 
     ON DAYOFMONTH(a._date) = DAYOFMONTH(b._date) 
GROUP BY DAYOFMONTH(a._date) 
ORDER BY a._date; 
1

是這樣的嗎?

SELECT DAY(daterange._date),SUM(pageviews) 
FROM daterange 
LEFT JOIN pageviews ON daterange._date = pageviews._date 
GROUP BY DAY(daterange._date)