Sql 按列分组+;计数(*),如何获得每个组合的平均计数?

Sql 按列分组+;计数(*),如何获得每个组合的平均计数?,sql,sql-server,sql-server-2005,group-by,Sql,Sql Server,Sql Server 2005,Group By,我有以下(简化)问题: 现在我需要fiCategory、fiSubCategory、fiSymptomas列的每个组合的平均计数。怎么做 例如: ResolvedBy Count fiCategory fiSubCategory fiSymptom Average 1 50 1 2 3 40 2 30 1

我有以下(简化)问题:

现在我需要
fiCategory、fiSubCategory、fiSymptom
as列的每个组合的平均计数。怎么做

例如:

ResolvedBy    Count    fiCategory    fiSubCategory    fiSymptom    Average
    1           50         1              2             3            40
    2           30         1              2             3            40
    3           40         1              2             3            40
    1           20         2              3             4            30
    2           40         2              3             4            30

示例中有fiCategory、fiSubCategory和fiSymptom的两种组合:
1,2,3
2,3,4
。因此,计算了两个平均值:

  • 50+30+40/3=40
  • 20+40/2=30 所以我想对每个组合的计数求和,除以发生的次数

    编辑:示例是对查询所需结果的提取。计数是由解析的每个
    的此组合的所有发生次数的总和

    提前谢谢。

    试试这个:

    Select ResolvedBy, [Count], fiCategory, fiSubCategory, fiSymptom
        , Avg(Z.Count) Over( Partition By fiCategory, fiSubCategory, fiSymptom ) As AvgByGrp
    From    (
            Select ResolvedBy, Count(*) As [Count], fiCategory, fiSubCategory, fiSymptom
            From tContact 
            Group By ResolvedBy, fiCategory, fiSubCategory, fiSymptom
            ) As Z
    
    Order By Z.Count Desc
    
    SELECT main.ResolvedBy, COUNT(*) AS Count, 
        main.fiCategory, main.fiSubCategory, main.fiSymptom, average
    FROM tContact main
    JOIN (SELECT COUNT(*)/count(distinct ResolvedBy) as average,
          fiCategory, fiSubCategory, fiSymptom group by 2,3,4) x
            on x.fiCategory = main.fiCategory
            and x.fiSubCategory = main.fiSubCategory
            and x.fiSymptom = main.fiSymptom
    WHERE main.ResolvedBy IS NOT NULL
    GROUP BY 1, 3, 4, 5
    ORDER BY 2 DESC
    

    为了帮助确定解决方案,您是如何得出平均值的?您是指使用显示的数据得出的平均值吗?也就是说,fiCategory的平均值为(1+1+1+2+2)/5=1.4?这也可能有助于了解您预期的输出结果。在本例中,fiCategory、fiSubCategory和fiSymptom有两种组合:1,2,3和2,3,4。因此,计算了两个平均值:1.combi=>50+30+40/3和2.combi=>20+40/2。因此,我想对每个组合的计数求和,并除以发生数。我得到一个“每个GROUP BY表达式必须至少包含一个非外部引用的列”。没有列
    count
    ,如果我将其更改为
    count(*)
    ,我会得到一个异常:“不能在group by子句的group by列表所用的表达式中使用聚合或子查询“@Tim Schmelter-Hm..你必须使用子查询来完成。将进行调整以进行演示。请尝试通过
    组中删除
    计数
    。我为Thomas添加了它,认为这是一个基于他在
    SELECT
    中如何使用它的专栏,但我可能做的坏事多于好事:(@Abe Miessler-我相信你必须先在派生表中运行计数,才能得到每组的计数。然后你可以对该结果进行平均。@Abe:也感谢你的工作和时间。它给出了正确的结果。令人印象深刻的是,人们可以在不知道确切要求和数据的情况下理解并解决这个问题。
    SELECT main.ResolvedBy, COUNT(*) AS Count, 
        main.fiCategory, main.fiSubCategory, main.fiSymptom, average
    FROM tContact main
    JOIN (SELECT COUNT(*)/count(distinct ResolvedBy) as average,
          fiCategory, fiSubCategory, fiSymptom group by 2,3,4) x
            on x.fiCategory = main.fiCategory
            and x.fiSubCategory = main.fiSubCategory
            and x.fiSymptom = main.fiSymptom
    WHERE main.ResolvedBy IS NOT NULL
    GROUP BY 1, 3, 4, 5
    ORDER BY 2 DESC