【问题标题】:mysql avg on conditionalmysql avg 有条件的
【发布时间】:2011-11-15 00:30:58
【问题描述】:

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

SELECT AVG( field ) from table

SELECT AVG ( field ) from table where col = some_val

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

【问题讨论】:

    标签: mysql average


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-30
        • 1970-01-01
        • 2013-11-20
        相关资源
        最近更新 更多