2011-11-15 18 views
7

è possibile ottenere il valore medio per una colonna, oltre al valore medio per la stessa colonna con un condizionale? o semplicemente per combinare queste due domande in una sola.mysql avg on condizionale

SELECT AVG(field) from table 

SELECT AVG (field) from table where col = some_val 

Se non c'è un modo semplice per combinarle utilizzando funzioni di MySQL native, avrebbe una funzione memorizzata in grado di gestire la cosa, o una funzione definita dall'utente?

risposta

18

Approfittando del fatto che null valori non sono inclusi nelle funzioni di aggregazione, possiamo usare una dichiarazione CASE per il controllo della media, come nell'esempio seguente: Demo

select avg(amt) as average, 
     avg(case when col=some_val then amt else null end) as conditionalAverage 
    from myTable; 

Esempio: http://sqlize.com/2IXwbWD2Eb

7

C'è un altro modo, non utilizzare il caso in cui

select 
    avg(amt) as average, 
    avg(if(col=some_val,amt,null)) as conditionalAverage 
from myTable 
Problemi correlati