2016-10-27 2 views
-1

아래의 데이터 세트에서 일일 수익을 계산하려고합니다. 0 일 경우 자산이 수익을 창출하지 못하고 일일 수익 계산에 포함되지 않아야합니다. 숫자 일일 수익을 검색하는 대신 NULL 값을 반환합니다. 다음은 내 코드와 데이터 세트입니다.SQL division이 Numeric 대신 NULL 값을 반환합니다.

**asset_revenue** 
      15 
      15 
      213 
      0 
      32 
      89 
      -47 

      SUM([asset_revenue])/SUM(CASE WHEN asset_revenue <> 0 THEN 7 ELSE NULL END) 

위의 예에서 나는 일일 수익이 7.54 일 것으로 기대하고 있습니다. SQL이 NULL 값을 반환하는 이유가 있습니까?

답변

0

평균을 얻으려고하는 것 같습니다.

NULL 대신 0을 사용하면됩니다. 이렇게하면 분모가 0이 아닌 행 수와 같아집니다. asset_revenue. 행 매주 수익을 표현하거나 7 요구가 다른 이유로 보존 할 경우,이 작업을 수행 할 경우

SELECT SUM([asset_revenue])/
    CASE 
     WHEN SUM([asset_revenue]) <> 0 THEN SUM(CASE WHEN asset_revenue <> 0 THEN 1 ELSE 0 END) 
     ELSE 1 -- Special case where asset_revenue is zero across the entire time period. 0/1 is still zero, so that represents an average revenue of zero. 
    END 

:

SELECT SUM([asset_revenue])/
    CASE 
     WHEN SUM([asset_revenue]) <> 0 THEN SUM(CASE WHEN asset_revenue <> 0 THEN 7 ELSE 0 END) 
     ELSE 1 -- Special case where asset_revenue is zero across the entire time period. 0/1 is still zero, so that represents an average revenue of zero. 
    END 

@Strawberry은 행이 매일 수익을 나타내는 경우

이유를으로 수정하면 스크립트에서 NULL을 반환합니다. NULL값이인지 알 수 없음을 의미합니다. 값이 무엇인지 모르는 경우 알 수없는 값을 산술 연산에 넣고 결과를 요청할 때 어떤 일이 발생하는지 알 수 없습니다. 55에 미지의 가치를 더한 것은 무엇입니까? 나는 모른다!

+0

감사합니다. 그러나 일 수를 통합하려면 7을 사용해야합니다. – pandoo

+0

대단히 반갑습니다. 나는 나의 대답을 업데이트했다. 그러나 'asset_revenue'가 0이 아닌 날에는 분모가 * 1을 합산하기 때문에'1 '이 올바른 것 같습니다. 즉, 매일 수익이 발생하면 결과는 7 + 1 + 1 + 1 + 1 + 1 + 1의 합계가됩니다. –

+0

나는 이것을 시도했지만 다음과 같은 오류가 발생했습니다. 오류가 발생했습니다. – pandoo

0

이유 : 지원

SELECT 1 + NULL; 
+----------+ 
| 1 + NULL | 
+----------+ 
|  NULL | 
+----------+ 
1 row in set (0.00 sec) 
관련 문제