2011-11-15 177 views
7

是否有可能获得列的平均值,以及具有条件的同一列的平均值?或者只是将这两个查询合并为一个。有条件的mysql平均值

SELECT AVG(field) from table 

SELECT AVG (field) from table where col = some_val 

如果没有简单的方法来使用本机mysql函数来组合它们,存储的函数是否能够处理它或用户定义的函数?

回答

18

考虑的事实null值不包含在聚合函数的优势,我们可以使用一个CASE语句来控制平均,如下列:

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

样品展示:http://sqlize.com/2IXwbWD2Eb

7

还有另外一种方法,不使用的情况下

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