如何计算多列的单独平均值

时间:2013-10-12 21:47:59

标签: sql ms-access ms-access-2010 where-clause

我有一个表有“月”作为列,“客户ID”作为主键。

我希望将每个月的所有值分别平均为不等于99999的值。

我对单个月的当前查询如下,并且工作正常:

SELECT Avg([Table1]![Dec10]) AS Expr1
FROM Table1
WHERE ((([Table1]![Dec10])<>99999);

然而,当我试图添加第二个月时,它将第一个月的条件与第二个月的条件相结合。

SELECT Avg([Table1]![Dec10) AS Expr1, Avg([Table1]![Dec11]) AS Expr2 
FROM Table1
WHERE ((([Table1]![Dec10])<>99999) And ([Table1]![Dec11])<>99999);

我需要将每个月分开,即计算Dec10&lt; 99999的平均值,并在第二列中计算Dec11&lt; 99999的平均值。

3 个答案:

答案 0 :(得分:0)

您需要在查询中使用Group By子句,然后您可以按月分隔输出。

答案 1 :(得分:0)

在这种情况下,使用GROUP BY会很方便。

如果您有不同的月份值,例如“jan10”,“feb10”,“mar12”等您可以在几个月内分组,然后检查值是否为99999.

SELECT avg(value), months
FROM tablename 
WHERE value <> 99999
GROUP BY months

也就是说,如果您将月份存储为列中的文字,但是从数据库设计中可以以其他方式存储?

答案 2 :(得分:0)

  

我需要将每个月分开,即计算Dec10&lt; 99999的平均值,并在第二列中计算Dec11&lt; 99999的平均值。

在Access 2010中,对于[表1] ...

CustomerID  Dec10  Dec11
----------  -----  -----
         1      1      5
         2      2  99999
         3  99999      0
         4      3      7

...查询...

SELECT
    DAvg("Dec10", "Table1", "Dec10<>99999") AS AvgOfDec10,
    DAvg("Dec11", "Table1", "Dec11<>99999") AS AvgOfDec11
FROM (SELECT COUNT(*) AS n FROM Table1)

...生产:

AvgOfDec10  AvgOfDec11
----------  ----------
2           4