代码之家  ›  专栏  ›  技术社区  ›  SP1

计算每行的平均值,然后计算每列的平均值

  •  0
  • SP1  · 技术社区  · 6 年前

    我有一张如下所示的表格

    Col1    Col2    Col3    Col4
    NULL    NULL    NULL    54.84
    NULL    NULL    NULL    75.40
    57.24   73.61   NULL    NULL
    

    所以我的计算变得

        Row1Avg   54.84
        Row2Avg   75.40
        Row3Avg   65.42
    

    然后我得到了最后的平均值 Row1Avg,Row2Avg,Row3Avg = 65.22

    3 回复  |  直到 6 年前
        1
  •  1
  •   arunes    6 年前

    尝试交叉应用

    SELECT 
        AVG(t2.Average)
    FROM
        Table t1
        CROSS APPLY (
            SELECT Average = AVG(Value) 
            FROM (VALUES (Col1), (Col2), (Col3), (Col4)) B1(Value)
        ) t2
    

    结果是 65.221666

        2
  •  1
  •   Joakim Danielson    6 年前

    cross apply grouping sets :

    select t.id, avg(row_avg)
    from t cross apply
         (select avg(col) as row_avg
          from (values (col1), (col2), (col3), (col4)) v(col)
         ) s
    group by grouping sets ( (id), () );
    

    以上假设您有一个唯一的id来标识每一行。如果没有,那么你需要像 union all

    with s as (
          select t.*, s.row_avg
          from t cross apply
               (select avg(col) as row_avg
                from (values (col1), (col2), (col3), (col4)) v(col)
               ) s
         )
    select s.row_avg
    from s
    union all
    select avg(s.row_avg)
    from s;
    
        3
  •  0
  •   boltzmanC    6 年前

    所以您需要每行和每列的平均值?我将做两个单独的计算,一个用于行,另一个用于列。通读表格并找出每行的平均值,将列值存储在临时列表格或列表中。