MySQL条件平均值

15

如何获取一列的平均值,以及具有特定条件的同一列的平均值?或者将这两个查询合并成一个。

SELECT AVG( field ) from table

SELECT AVG ( field ) from table where col = some_val

如果没有使用本地mysql函数简单地将它们组合的方法,那么存储函数或用户定义的函数能够处理它吗?

2个回答

37

利用空值不包含在聚合函数中的特性,我们可以使用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


14

还有一种方法,不使用case when

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接