2011-10-12 6 views
16

Ho il seguente SQL: (BITEMP)Cercando di ottenere la media di un gruppo di risultati conteggio

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 

ora sto ottenendo un gruppo di risultati con un sacco di numeri. Voglio ottenere la media di questa lista. Al momento, sto importando la lista in Excel e uso la sua funzione media. Ma esiste una funzione AVG per DB2, ma non ho potuto farlo funzionare.

Ho provato SELECT AVG(COUNT(*)) e anche SELECT AVG(*) FROM (theQuery).

+0

La domanda è piuttosto vecchio e risolto, non c'è bisogno di qualsiasi campione dal mio punto di vista – Xavjer

risposta

38

Hai appena può mettere la query come sottoquery:

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: Credo che questo dovrebbe essere lo stesso:

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

penso che questo mi stia ottenendo la media di ogni risultato, che è uno (perché è raggruppato) ma voglio ottenere la media del contenuto del conteggio, quindi se ricevo 2,4,6 il avg sarebbe essere 4, ma ricevo 1 (perché ce n'è solo 1) – Xavjer

+0

Se la sottoquery "conta" restituisce 2,4,6, quindi il parametro 'avg' su questa sottoquery restituirà 4. Potresti pubblicare nella domanda il risultato' SELECT * FROM Table T WHERE T.Update_time = (...) '? Questo può essere utile per aiutarti. – DavidEG

+3

Bene, ho trovato una soluzione al mio problema, grazie al tuo esempio di subquery. Lo sto usando come segue: SELECT CAST (somma (Count) AS FLOAT)/CAST (COUNT (Count) AS FLOAT) ... funziona come desiderato, grazie;) (tuttavia non so perché avg restituisce 1, anche se lanciato come float, il risultato è 1.91 ... – Xavjer