【问题标题】:Rollup amount avg汇总金额平均
【发布时间】:2019-07-22 03:32:53
【问题描述】:

我有一个与其他表连接的表 EMP; EMP 有这样的 empname 和 emplength(以月为单位)

'A' 100
'B' 110
'D' 80
'E' 120

我正在计算每年的平均长度,即每个员工和整体除以 12。这里的问题是如何使用汇总计算总体平均金额?

输出应该是这样的

'A' 8.33
'B' 9.16
'D' 6.66
'E' 10.00
total 8.54

【问题讨论】:

    标签: sql sql-server average rollup


    【解决方案1】:

    对于这种情况,您不需要 ROLLUP。您可以使用UNION ALL 来实现这一点,如下所示。

    select name, [length] / 12.0
    from yourtable
    union all
    select 'Total', avg(length/12.0)
    from yourtable
    

    但如果你想使用ROLLUP,你可以尝试如下。

    select name , avg([length])
    from
    (
        select name, [length] / 12.0 as [length]
        from yourtable
        cross join
        (
         values(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)
        ) t(a)
    ) t
    group by  rollup(name)
    

    Online Demo

    【讨论】:

    • 谢谢,是的,我们也可以这样做,但我也汇总了其他领域
    • 谢谢;但为什么要交叉加入?
    • 当你想在没有联合的情况下使用 ROLLUP 进行平均时,你只能使用一个聚合,所以我将 1 行更改为 12 行并做了一个平均值。
    【解决方案2】:

    你可以使用grouping sets:

    select coalesce(empname, total) as empname, avg(emplength)
    from . . .
    group by grouping sets (empname, ());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-11
      • 1970-01-01
      • 2020-12-23
      • 1970-01-01
      • 2016-12-05
      • 2012-06-30
      • 2021-04-08
      相关资源
      最近更新 更多