2011-03-17 4 views
16

평균을 수행해야하지만 그 열의 값은 대부분 0입니다. 가능한 모든 행 중에서 2 개만 양수 값을 가질 것입니다. 어떻게하면 0을 무시하고 실제 값만 평균화하도록 mySQL에 지시 할 수 있습니까?0을 무시하는 Mysql AVG

답변

68

SELECT AVG(NULLIF(field ,0)) 
from table 
(아마도 그들은 다른 컬럼의 값은 당신이 집계하려는이) 완전히 같은 행을 배제하지 할 수 있다는 가정
+0

감사합니다. 아마도 가장 좋은 옵션 일 것입니다. 예, 다른 columnns에 값이 있습니다! – Oranges13

+2

이 훌륭한 작동합니다 - 특히 귀하의 쿼리에 1 개 이상의 집계 함수가있는 경우 – Avishai

6

당신은 아마 WHERE 절을 통해 그것을 통제 할 수 :

select avg(field) from table where field > 0 
+0

필드가 0보다 큰 행만 내가 걱정하고있는 행입니다. 불행하게도이 경우 다른 위치에 있는지 확인해야하는 3 개의 다른 열이 있습니다. – Oranges13

0
select avg(your_column) 
from your_table 
where your_column != 0 
+0

다른 큰 평균 한 번에 끌어 오기 원하는 필드가 있다는 것을 제외하면 그 작동합니다. – Oranges13

0

NULL으로 변환 할 수 있으며 AVG() 함수는 NULL 값으로 만 작동합니다.

UPDATE table SET column = NULL WHERE column='0'; 
SELECT AVG(column) FROM table; 
+2

Yeesh. 기존 데이터를 변경하여'SELECT' 작업을 하시겠습니까? 나는 토할 것 같아. –

관련 문제