有条件的mysql avg

时间:2011-11-15 00:30:59

标签: mysql average

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

SELECT AVG( field ) from table

SELECT AVG ( field ) from table where col = some_val

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

2 个答案:

答案 0 :(得分:24)

利用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

答案 1 :(得分:9)

还有另外一种方法,

时不使用大小写
select 
   avg(amt) as average, 
   avg(if(col=some_val,amt,null)) as conditionalAverage
 from myTable