1

假设我在表 X 中有数据:

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

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

select id, count(distinct assign) from X group by id order by count(distinct assign)desc;

它会给我一些东西:

1  2
2  3
3  1

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

另外,现在我想知道每支球队的人数。所以我想得到类似的东西:

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

提前致谢!

4

2 回答 2

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
于 2010-06-11T17:38:59.187 回答
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 子句中定义。

于 2010-06-11T17:43:30.000 回答