SQL获取不同的统计信息

时间:2010-06-11 17:33:50

标签: sql sql-server aggregate-functions

假设我在表X中有数据:

id     assign  team
 ----------------------  
 1     hunkim    A  
 1     ygg       A  
 2     hun       B  
 2     gw        B  
 2     david     B  
 3     haha      A

我想知道每个id有多少分配。我可以使用:

  

从中选择id,count(distinct assign)   X组由id   按计数排序(不同的分配)desc;

它会给我一些东西:

1  2
2  3
3  1

我的问题是如何获得所有分配计数的平均值?

此外,现在我想了解每个团队的薪酬。所以我希望得到类似的东西:

team    assign_avg
-------------------
A         1.5
B         3

提前致谢!

2 个答案:

答案 0 :(得分:1)

SELECT
    AVG(CAST(assign_count AS DECIMAL(10, 4)))
FROM
    (SELECT
        id,
        COUNT(DISTINCT assign) AS assign_count
    FROM
        X
    GROUP BY
        id) Assign_Counts

SELECT
    team,
    AVG(CAST(assign_count AS DECIMAL(10, 4)))
FROM
    (SELECT
        id,
        team,
        COUNT(DISTINCT assign) AS assign_count
    FROM
        X
    GROUP BY
        id,
        team) Assign_Counts
GROUP BY
    Team

答案 1 :(得分:1)

您可以使用聚合函数COUNT和AVG在一个查询中完成所需的操作:

  SELECT t.id,
         COUNT(*) AS num_instances,
         AVG(t.id) AS assign_avg
    FROM TABLE t
GROUP BY t.id

不需要对它们执行聚合函数的列需要在GROUP BY子句中定义。