2012-09-13 105 views
4

我有一个名为值的表包含3列 - 位置,价值,日期SQL - 月平均,而不是日均

我想工作,每月平均值

到目前为止,我

SELECT Location, Avg(value), date 
FROM Value 
GROUP BY Location, date 

这将返回平均值,但每天输入一个值,所以我每天都有一个平均值,而不是每个月,我如何才能达到月平均值?

+1

欢迎来到SO,@ user1505127。如果您找到可行的答案,请通过给予绿色支票给予奖励。这就是我们觉得有用的方式:) – PowerUser

+0

年度信息怎么样?如果您只指定月份,则每年的同一月份将被同时平均(即2011年和2012年的AVG January等)。相对于包含年度信息(因此,2012年1月的AVG与2011年的1月不同)等。 –

回答

7

试试这个:

SELECT Location, 
      Avg(value), 
      month(date), 
      year(date) 
FROM  Value 
GROUP BY Location, 
      month(date), 
      year(date) 
+0

所有答案都很好,欢呼声! – DtotheG

+0

我想你在第一个“月(日期)”后错过了一个逗号。 – Sparky

4
SELECT 
    Location, 
    year(date), 
    month(date), 
    Avg(value) 
FROM 
    Value 
GROUP BY 
    Location, 
    year(date), 
    month(date) 
5

您可以使用下面的,如果你想每个月只有分组:

SELECT Location, Avg(value) AvgVal, Month(date) Mnth 
FROM Value 
GROUP BY Location, Month(date) 

你甚至可以使用GROUPING SETS,这将GROUP BY一个月,一年,位置,然后给你一个总的所有:

SELECT Location, 
    Avg(value) AvgVal, 
    Month(dt) Mnth, 
    Year(dt) Yr 
FROM yourtable 
GROUP BY 
    GROUPING SETS((Month(dt), Year(dt), Location), (Location)); 

SQL Fiddle with Demo