2011-11-15 181 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