【问题标题】:Avg of a Sum in one query一个查询中总和的平均值
【发布时间】:2010-12-07 01:37:26
【问题描述】:

我想知道是否可以在单个 SQL SERVER 请求中获得总和的平均值,

已尝试通过以下请求执行此操作,但不起作用:

  SELECT t.client, 
         AVG(SUM(t.asset)) AS Expr1
    FROM TABLE t
GROUP BY t.client

【问题讨论】:

  • 您是否要获取客户资产的平均值?
  • 每个客户资产总和的平均值

标签: sql sql-server tsql sum average


【解决方案1】:
sum(avg(value) from * tablname

【讨论】:

    【解决方案2】:

    我认为您的问题需要一些解释。如果您想获取按t.client 分组的总和,您可以使用:

    SELECT t.client, SUM(t.asset)
    FROM the-table t
    GROUP BY t.client
    

    那么,如果你想取这个 sum 的平均值,只需做:

    SELECT AVG(asset_sums)
    FROM
    (
        SELECT t.client, SUM(t.asset) AS asset_sums
        FROM the-table t
        GROUP BY t.client
    ) as inner_query
    

    但是,您不能对外部查询进行分组,因为这会给您提供与第一个查询类似的结果。内部查询的结果已经按t.client 分组。

    【讨论】:

    • 什么是 ?在最后一个括号之后?
    • 是内部查询的昵称。每个内部查询都必须有名称。
    • 我认为您需要将 avg(t.asset) 更改为 avg(inner_query.asset)
    • 添加您需要别名 sum(t.asset) 作为资产
    【解决方案3】:

    很简单

    例如

     SELECT t.client, 
             SUM(t.asset)/count(t.asset) AS average
        FROM TABLE t
    GROUP BY t.client
    

    在“平均”中,您将获得“t.asset”的平均值

    【讨论】:

    • 哇,一个更简单的解决方案的完美示例。有时我喜欢数学!
    • @Kalpesh 如何获得SUM of AVG of t.asset.?
    【解决方案4】:

    如果您想获得客户的平均资产,我想我会在 CTE 使用。如果 sql 2005 或更高版本,您可以尝试

    编辑: 将第二组排除在外,因为我认为您只需要一个平均资产结果

    With clientsum (client,assets)
    as
    (
        SELECT     CLIENT, SUM(asset) AS assets
        FROM         CLIENTTABLE
        GROUP BY CLIENT
    )
    SELECT avg(assets) AS Expr1
    FROM  clientsum
    

    【讨论】:

      猜你喜欢
      • 2023-02-10
      • 1970-01-01
      • 1970-01-01
      • 2020-11-03
      • 2019-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多