2011-01-23 3 views
1

누군가가 이것이 작동하지 않는 이유를 말해 줄 수 있습니까? 두 개의 서로 다른 열을 더하고 함께 합치고 싶습니다. 테스트 데이터는 한 열에서는 10이고 다른 열에서는 10입니다. 총 20 개가 예상됩니다.Mysql 추가, 예상대로 결과가 없습니다.

Sum(col1 + col2) as total 

답변

5

아마 하나 또는 둘 모두의 열에 NULL 값이 있습니다. 집계 함수 SUM은 NULL 값을 무시하지만 더하기 연산자는 그렇지 않습니다. - (1 + NULL) 값은 NULL입니다 (예상 한대로 1이 아님). 결과적으로 합계는 예상보다 낮아집니다.

올바른 합계를 얻으려면, 당신은 개별적으로 각 열을 통해 SUM 결과를 추가 할 수 있습니다 열 중 하나가 완전히 NULL이 될 수 있다면이 여전히 작동하지 않습니다

SUM(col1) + SUM(col2) AS total 

. 그럼 당신이 시도 할 수 있습니다 :

SELECT SUM(col1), SUM(col2)  FROM yourtable; -- Returns 10, 10 
SELECT SUM(col1 + col2)   FROM yourtable; -- Returns 15 
SELECT SUM(col1) + SUM(col2)  FROM yourtable; -- Returns 20 
SELECT SUM(col1 + IFNULL(col2, 0)) FROM yourtable; -- Returns 20 

테스트 데이터 :

CREATE TABLE yourtable (col1 INT NOT NULL, col2 INT NULL); 
INSERT INTO yourtable (col1, col2) VALUES (5, NULL), (5, 10); 

 
col1 | col2 
-----+---- 
5 | NULL 
5 | 10 

그런 다음 서로 다른 쿼리를 시도 :

예를 들어
SUM(IFNULL(col1, 0)) + IFNULL(col2, 0)) AS total 

,이 테이블이 상상

+0

감사 마크. 그거였다. :) – jim

+0

또한 편집을 지금까지 보지 못했습니다. 고마워요. 정말 저를 위해 그것을 원근법으로 만듭니다. – jim

+0

@jim : 천만에요. –

관련 문제