【问题标题】:how to calculate separate averages for multiple columns如何计算多列的单独平均值
【发布时间】:2013-10-12 21:47:58
【问题描述】:

我有一个表,其中“月”作为列,“客户 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);

我需要将每个月分开,即计算 Dec1099999 的平均值,并在第二列中计算 Dec1199999 的平均值。

【问题讨论】:

  • 您使用的是哪个数据库?

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    如果您有不同的月份值,例如“jan10”、“feb10”、“mar12”等可以按月份分组,然后检查值是否不是99999。

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

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

    【讨论】:

      【解决方案3】:

      我需要将每个月分开,即计算 Dec1099999 的平均值,并在第二列中计算 Dec1199999 的平均值。

      在 Access 2010 中,对于 [Table1]...

      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         
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-08
        • 1970-01-01
        • 2020-08-10
        • 2017-02-06
        • 1970-01-01
        • 2015-09-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多