2011-10-12 5 views
16

tengo el siguiente código SQL: (bitemp)Tratando de obtener el promedio de un conjunto de resultados recuento

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 

ahora que estoy recibiendo un conjunto de resultados con una gran cantidad de números. Quiero obtener el promedio de esta lista. Por el momento, estoy importando la lista en Excel y uso su función promedio. Pero hay una función AVG para DB2, pero no conseguí que funcionara.

Intenté SELECT AVG(COUNT(*)) y también SELECT AVG(*) FROM (theQuery).

+0

La pregunta es bastante viejo y resuelto, no hay necesidad de cualquier muestra desde mi punto de vista – Xavjer

Respuesta

38

Sólo puede poner su consulta como una subconsulta:

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 

Editar: Creo que este debe ser el mismo:

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

creo que esto me está dando el promedio de cada resultado, que es uno (porque está agrupado) pero quiero obtener el promedio del contenido del recuento, así que si recibo 2,4,6 el avg ser 4, pero recibo 1 (porque solo hay 1 de cada) – Xavjer

+0

Si la subconsulta "cuenta" devuelve 2,4,6 y luego regresa el 'avg' sobre esta subconsulta 4. ¿Podría publicar en su pregunta el resultado' SELECT * FROM Table T WHERE T.Update_time = (...) '? Esto puede ser útil para ayudarte. – DavidEG

+3

Bueno, encontré una solución a mi problema, gracias a su ejemplo de subconsulta. Lo estoy usando de la siguiente manera: SELECT CAST (sum (Count) AS FLOAT)/CAST (COUNT (Count) AS FLOAT) ... funciona como lo desees, gracias;) (sin embargo, no sé por qué AVG devuelve 1, incluso cuando se lanza como flotante, el resultado es 1.91 ... – Xavjer

Cuestiones relacionadas