2011-10-12 28 views
16

Tôi có SQL sau đây: (bitemp)Đang cố gắng để có được tỷ lệ trung bình của một resultset đếm

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 

bây giờ tôi nhận được một resultset với rất nhiều con số. Tôi muốn lấy mức trung bình của danh sách này. Hiện tại, tôi đang nhập danh sách vào excel và sử dụng chức năng trung bình của nó. Nhưng có một chức năng AVG cho DB2, nhưng tôi đã không làm cho nó hoạt động.

Tôi đã thử SELECT AVG(COUNT(*)) và cũng SELECT AVG(*) FROM (theQuery).

+0

Câu hỏi đặt ra là khá cũ và giải quyết, không cần bất kỳ mẫu theo quan điểm của tôi – Xavjer

Trả lời

38

Bạn chỉ có thể đặt câu hỏi của bạn như một subquery:

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 

Edit: Tôi nghĩ rằng đây sẽ là giống nhau:

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

tôi nghĩ đây là mức trung bình của mỗi kết quả, đó là một (vì nhóm của nó) nhưng tôi muốn lấy trung bình của nội dung đếm, vì vậy nếu tôi nhận được 2,4,6 thì là 4, nhưng tôi nhận được 1 (vì chỉ có 1 trong số đó) – Xavjer

+0

Nếu truy vấn con "đếm" trả về 2,4,6 sau đó 'avg' trên truy vấn con này sẽ trả về 4. Bạn có thể đăng câu hỏi của bạn kết quả' SELECT * FROM Table T WHERE T.Update_time = (...) '? Điều này có thể hữu ích để giúp bạn. – DavidEG

+3

Vâng, tôi đã tìm thấy một giải pháp cho vấn đề của tôi, nhờ vào ví dụ truy vấn con của bạn. Tôi đang sử dụng nó như sau: SELECT CAST (tổng (Đếm) AS FLOAT)/CAST (COUNT (Đếm) AS FLOAT) ... công trình này như mong muốn, cảm ơn;) (tuy nhiên tôi không biết tại sao avg trả về 1, kết quả là 1.91 ... – Xavjer

Các vấn đề liên quan