2014-04-29 2 views
0

논리가 매우 간단 함에도 불구하고 나에게이 사실을 알릴 수는 없습니다. MySQL 평균 일부 NULL 값 제외

나는 다음과 같은 필드가 포함 된 작은 MySQL 데이터베이스가 :
  • 고른

    • 다양한
    • 무게

    내가 MySQL의에서보기 무엇 평균을보고 설정을 가지고 각 품종의 무게는 SUM (weight)/SUM (picked)를 사용하고 있지만 가끔은 가중치가 입력되지 않으므로 평균값에서 뽑은 합계를 제외하고 거짓 평균을주지 않으려합니다.

    내가 사용하던 :

    SELECT variety, if(weight="", sum(weight)/sum(picked),0) As AvgWeight 
    FROM `harvest` 
    GROUP BY variety 
    

    사람이 올바른 방향으로 제발 포인트?

    | picked| weight| 
    | :---: | :---:| 
    | 10 | 20 | 
    | 10 | 30 | 
    | 10 |  | 
    

    나는 위의 2.0로 AvgWeight 야기 할 것이며,하지 1.6666667

  • +0

    select (sum ../ sum ..) ... 여기서 weight! = '' – PCoder

    답변

    2

    평균이 2.5가 아니라 2.0이라고 가정합니다. 그렇다면, 조건부 집계를 사용하여 평균을 계산한다

    select variety, 
         (sum(case when weight > 0 then weight else 0 end)/
         sum(case when weight > 0 then picked else 0 end) 
         ) as average 
    from harvest 
    group by variety; 
    

    발현 weight > 0NULL 값과 블랭크 값을 모두 제거한다 (weight는 숫자 형식으로 정의되어있는 경우, 그 값은 비어있을 수있다).

    +0

    예 2.5를 의미하고 잘못된 값을 썼습니다. 찾고 있던 것을 완벽하게 고맙습니다. – Palendrone

    0

    는 않는 coalesce(weight, 0) 이것은 당신의 비교를 위해 첫 번째 null이 아닌 정수를 반환하고 같은 행을 반환합니다

    최종 집계를 망치지 않고 계산의 일부