programing

내 SUM 선택 쿼리가 null을 반환합니다.0을 반환해야 합니다.

mailnote 2023. 7. 10. 22:36
반응형

내 SUM 선택 쿼리가 null을 반환합니다.0을 반환해야 합니다.

다음 쿼리를 사용하여 고객 잔액을 요약하려고 합니다.

select sum(balance) from mytable where customer = 'john' 

그러나 고객이 잔액이 없는 경우(즉, 일치하는 행이 없는 경우)mytable테이블), 내 쿼리는 0이 아닌 null을 반환합니다.문제가 뭐죠?

사용해 보십시오.

select COALESCE(sum(balance),0) from mytable where customer = 'john' 

이 정도면 효과가 있을 겁니다.병합 메서드는 0을 반환해야 합니다.

그건 문제가 아닙니다.행이 없으면,sum()돌아올 것입니다null또한 반환됩니다.null모든 행에 a가 있는 경우null균형.

대신 0을 반환하려면 다음을 시도합니다.

select isnull(sum(balance),0) from mytable where customer = 'john' 
select coalesce(sum(coalesce(balance,0)),0) from mytable where customer = 'john' 

아마도 당신은 생각하고 있을 것입니다.COUNT의 행동?

COUNT(Field)돌아올 것입니다0그렇지만SUM(Field)돌아온다NULL일치하는 행이 없는 경우.

당신은 필요합니다.ISNULL또는COALESCE

결합 또는 ISNULL

모든 값이 다음과 같은 경우에만 발생합니다.NULL또는 값/값이 전혀 없습니다.

커튼 뒤에서 무슨 일이 일어나는지 항상 테스트할 수 있습니다.

사용자 정의 값을 사용한 예제(Postgre)SQL SQL):

WITH test_data (a, b) as (
  SELECT * 
  FROM (VALUES 
         ('example1', 1), 
         ('example2', 2), 
         ('example3', NULL), 
         ('example3', 3), 
         (NULL, NULL), 
         (NULL, 5), 
         (NULL, 5),
         ('example4', NULL)
       ) t
)
SELECT 
  a,
  SUM(b) AS b
FROM test_data
GROUP BY 1

사용해 보십시오.

select sum(IsNull(balance,0)) from mytable where customer = 'john' 

언급URL : https://stackoverflow.com/questions/17048343/my-select-sum-query-returns-null-it-should-return-0

반응형