SQL Server中的平均行数

时间:2019-01-15 16:04:29

标签: sql sql-server sql-server-2012

我有下表

Col1  Col2  Col3  Col4   Col5
TotalAvg 68.79 65.39 88.21  63.14

我已经保存了TotalAvg行中所有列的总数,但是现在我想计算TotalAvg行的平均值。有人可以告诉我如何计算行平均值。

我正在寻找

Select Avg(Col2,Col3,Col4,Col5)
    where Col1 = 'TotalAvg'

谢谢

2 个答案:

答案 0 :(得分:0)

如果偶然需要一种更动态的方法(即变量列),并且如果您愿意接受TVF,请考虑以下因素:

  

编辑

第一个参数是要排除的分隔列列表。例如:'IDNr,Year,AnyOtherNumericCol'

示例

Select A.* 
      ,B.*
 From  YourTable A
 Cross Apply [dbo].[tvf-Stat-Row-Agg]('',(Select A.* for XML Raw)) B

返回

Col1        Col2    Col3    Col4    Col5    RetCnt  RetSum  RetMin  RetMax  RetAvg  RetStd
TotalAvg    68.79   65.39   88.21   63.14   4       285.53  63.14   88.21   71.3825 11.4562162892757

感兴趣的TVF

CREATE FUNCTION [dbo].[tvf-Stat-Row-Agg](@Exclude varchar(500),@XML xml)
Returns Table 
As
Return (  
    Select RetCnt = Count(Value)
          ,RetSum = Sum(Value)
          ,RetMin = Min(Value)
          ,RetMax = Max(Value)
          ,RetAvg = Avg(Value)
          ,RetStd = Stdev(Value)
    From  (
            Select Item  = convert(varchar(100),xAttr.query('local-name(.)'))
                  ,Value = try_convert(float,xAttr.value('.','varchar(max)'))
             From  @XML.nodes('//@*') x(xAttr)
          ) S
    Where charindex(','+S.Item+',',','+@Exclude+',')=0
);
  

编辑2

如果列固定,并且性能至关重要,那么...

Select A.* 
      ,B.*
 From  YourTable A
 Cross Apply (
               Select AvgVal = avg(Value)
                 From (values (Col2)
                             ,(Col3)
                             ,(Col4)
                             ,(Col5)
                      ) B1(Value)
             ) B

答案 1 :(得分:0)

如果其中一些可能具有NULL值,则您仍可以在<div class="dropdown"> <button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> Dropdown button </button> <div class="dropdown-menu" aria-labelledby="dropdownMenuButton"> <a class="dropdown-item" href="#">Action</a> <a class="dropdown-item" href="#">Another action</a> <a class="dropdown-item" href="#">Something else here</a> </div> </div> 内使用AVG()

APPLY