【问题标题】:Trying to get the average of a count resultset试图获得计数结果集的平均值
【发布时间】:2011-12-05 23:25:40
【问题描述】:

我有以下 SQL:(bitem)

SELECT COUNT (*) AS Count
  FROM Table T
 WHERE (T.Update_time =
           (SELECT MAX (B.Update_time )
              FROM Table B
             WHERE (B.Id = T.Id))
GROUP BY T.Grouping

现在我得到一个包含很多数字的结果集。我想得到这个列表的平均值。目前,我正在将列表导入 excel 并使用它的平均功能。但是 DB2 有一个 AVG 函数,但我没有让它工作。

我试过SELECT AVG(COUNT(*))SELECT AVG(*) FROM (theQuery)

【问题讨论】:

  • 这个问题已经很老了,已经解决了,从我的角度来看,不需要任何样本

标签: sql count db2 resultset average


【解决方案1】:

您可以将查询作为子查询:

SELECT avg(count)
  FROM 
    (
    SELECT COUNT (*) AS Count
      FROM Table T
     WHERE T.Update_time =
               (SELECT MAX (B.Update_time )
                  FROM Table B
                 WHERE (B.Id = T.Id))
    GROUP BY T.Grouping
    ) as counts

编辑:我认为这应该是一样的:

SELECT count(*) / count(distinct T.Grouping)
  FROM Table T
 WHERE T.Update_time =
           (SELECT MAX (B.Update_time)
              FROM Table B
             WHERE (B.Id = T.Id))

【讨论】:

  • 我认为这是让我得到每个结果的平均值,这是一个(因为它是分组的)但我想获得计数内容的平均值,所以如果我收到 2、4、6 avg 为 4 ,但我收到 1 (因为每个只有 1 个)
  • 如果子查询“counts”返回 2,4,6,则此子查询上的 avg 将返回 4。您能否在问题中发布结果 SELECT * FROM Table T WHERE T.Update_time = (...)?这可能对您有所帮助。
  • 好吧,感谢您的子查询示例,我找到了解决问题的方法。我按如下方式使用它: SELECT CAST(sum(Count) AS FLOAT) / CAST(COUNT(Count) AS FLOAT) ... 这可以按需要工作,谢谢;)(但是我不知道为什么 avg 返回 1,即使转换为浮点数。结果是 1.91...
  • 好的,找到了完美的解决方案,使用SELECT AVG(CAST(COUNT AS FLOAT))
猜你喜欢
  • 2015-04-05
  • 1970-01-01
  • 1970-01-01
  • 2016-09-08
  • 2012-03-31
  • 2021-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多