2010-06-11 62 views
1

假設我有表X數據:SQL來獲得不同的統計

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

我想知道每個ID多少受讓人。我可以得到使用:

選擇ID,通過計數由ID從 X基團數(不同分配) 順序(不同的分配)遞減;

它會給我的東西:

1 2 
2 3 
3 1 

我的問題是如何獲得的所有分配數的平均?

此外,現在我想知道每隊的平均數。所以我想得到像這樣的東西:

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

在此先感謝!

+0

你能解釋爲什麼A應該是1.5和B 3嗎?我無法真正看到你在做什麼計算。 – 2010-06-11 17:37:46

+0

什麼數據庫是「mssqlft」? – 2010-06-11 17:43:49

回答

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 
+0

這很好。我如何獲得AVG浮動?它給我的只是int值。 – 2010-06-11 19:58:49

+0

您只需要CAST count列(您可以在子查詢中執行此操作,也可以按照上面的外部查詢操作)。 – 2010-06-11 20:07:47

1

你想在一個查詢來完成,使用聚合函數COUNT和AVG什麼:沒有對他們進行一個聚合函數需要在GROUP BY中定義

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

列條款。

+0

您無法在(*)上執行AVG。你需要在那裏有一個數字表達式。 – 2010-06-11 17:47:31

+0

@Tom H:更正,thx。 – 2010-06-11 17:48:34