2012-08-16 77 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)