2011-10-12 55 views
16

我有以下SQL的平均值:(雙溫)試圖讓一個計數結果集

SELECT COUNT (*) AS Count 
    FROM Table T 
WHERE (T.Update_time = 
      (SELECT MAX (B.Update_time) 
       FROM Table B 
      WHERE (B.Id = T.Id)) 
GROUP BY T.Grouping 

現在我得到一個結果有很多數字。我想要得到這個列表的平均值。目前,我正在將該列表導入到excel中並使用其平均功能。但是DB2有一個AVG函數,但我沒有得到它的工作。

我試過SELECT AVG(COUNT(*))SELECT AVG(*) FROM (theQuery)

+0

的問題是很老和解決,無需任何樣品的從我的角度來看 – Xavjer

回答

38

你只可以把你的查詢作爲子查詢:

SELECT avg(count) 
    FROM 
    (
    SELECT COUNT (*) AS Count 
     FROM Table T 
    WHERE T.Update_time = 
       (SELECT MAX (B.Update_time) 
        FROM Table B 
       WHERE (B.Id = T.Id)) 
    GROUP BY T.Grouping 
    ) as counts 

編輯:我想這應該是相同的:

SELECT count(*)/count(distinct T.Grouping) 
    FROM Table T 
WHERE T.Update_time = 
      (SELECT MAX (B.Update_time) 
       FROM Table B 
      WHERE (B.Id = T.Id)) 
+0

我認爲這是我得到的每個結果的平均值,這是一個(因爲它的分組),但我想得到計數內容的平均值,所以如果我收到2,4,6平均值是4,但我收到1(因爲每個只有1) – Xavjer

+0

如果子查詢「計數」返回2,4,6,那麼這個子查詢上的'avg'將返回4.你可以在你的問題中發佈結果'SELECT * FROM Table T WHERE T.Update_time =(...)'?這可能對您有所幫助。 – DavidEG

+3

嗯,我發現我的問題的解決方案,感謝你的子查詢的例子。我使用它如下:SELECT CAST(sum(Count)AS FLOAT)/ CAST(COUNT(Count)AS FLOAT)...這個按需要工作,謝謝;)(但我不知道爲什麼avg返回1,即使當作爲浮動投射,結果是1.91 ... – Xavjer