2011-11-15 27 views
7

¿es posible obtener el valor promedio de una columna, así como el valor promedio para la misma columna con un condicional? o simplemente para combinar estas dos consultas en una.mysql avg en condicional

SELECT AVG(field) from table 

SELECT AVG (field) from table where col = some_val 

Si no hay una forma sencilla de combinar el uso de las funciones de MySQL nativos, sería una función almacenada ser capaz de manejar la situación, o una función definida por el usuario?

Respuesta

18

Aprovechando el hecho de que null valores no están incluidos en las funciones de agregado, podemos utilizar una declaración CASE para controlar el promedio, como en el siguiente: Demo

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

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

7

Hay otra manera, sin usar el caso cuando

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