2011-11-15 29 views
7

có thể lấy giá trị trung bình cho một cột, cũng như giá trị trung bình cho cùng một cột với điều kiện không? hoặc chỉ cần kết hợp hai truy vấn này thành một.mysql avg trên điều kiện

SELECT AVG(field) from table 

SELECT AVG (field) from table where col = some_val 

Nếu không có một cách đơn giản để kết hợp chúng sử dụng các hàm mysql bản xứ, sẽ là một chức năng lưu trữ có thể xử lý nó, hoặc một người dùng chức năng được xác định?

Trả lời

18

Lợi dụng thực tế là null giá trị không nằm trong chức năng tổng hợp, chúng ta có thể sử dụng một tuyên bố CASE để kiểm soát mức trung bình, như trong những điều sau đây: Demo

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

mẫu: http://sqlize.com/2IXwbWD2Eb

7

Có một cách khác, không sử dụng trường hợp khi

select 
    avg(amt) as average, 
    avg(if(col=some_val,amt,null)) as conditionalAverage 
from myTable 
Các vấn đề liên quan