2013-11-04 4 views
0

얼마나 많은 사람들이 각 질문에 대답했는지 보여주는 막대 그래프를 출력하는 간단한 응답 추적 응용 프로그램을 구성하고 있습니다. 각 차트의 경우 각 열의 MySQL 합계와 모든 열의 합

a_id q_id a_option_1 a_option_2 a_option_3 a_option_4 
1  1  NULL  NULL  1   NULL 
2  1  NULL  1   NULL  NULL 
3  1  1   NULL  NULL  NULL 
4  1  1   NULL  NULL  NULL 
5  2  NULL  1   NULL  NULL 
6  2  1   NULL  NULL  NULL 
7  2  1   NULL  NULL  NULL 
8  2  1   NULL  NULL  NULL 

, 내가하고 있어요 : 각 옵션의 대답하지만

sum(a_option_1) + sum(a_option_2) + sum(a_option_3) + sum(a_option_4) as total 

이있는 경우 잘 작동

SELECT sum(a_option_1) as a_1, sum(a_option_2) as a_2, sum(a_option_3) as a_3, sum(a_option_4) as a_4, sum(a_option_1) + sum(a_option_2) + sum(a_option_3) + sum(a_option_4) as total FROM interactive_answers WHERE q_id = x 

은 아무것도 출력하지 않습니다 경우 일부 옵션 가치가 없어.

계정을 작성하려면 어떻게해야합니까?

+3

먼저 홍당무로 SUM (COALESCE (a_option_1, 0))과 같이 COALESCE를 사용하십시오. COALESCE는 정의 된 숫자를 방정식에 삽입하는 첫 번째 널 (null)이 아닌 인수를 리턴합니다. – bishop

+0

[가능한 값이 없으면 MySQL에서 SUM 함수를 '0'으로 반환하려면 어떻게합니까?] (http://stackoverflow.com/questions/7602271/how-do-i-get-sum-function- mysql-to-return-0-if-no-values-are-found) – Noel

+0

또는 IFNULL (fieldname, 0)을 사용하여 null 대신에 0을 반환합니다 (중단) –

답변

1

답변을 입력 해 보겠습니다. 중복 이상의 정보를 추가하겠습니다.

중 하나를 선택합니다 : - 나는에 가까운 뭉쳤다 "넣을 생각

SUM(COALESCE(a_option_1, 0)) 

또는

COALESCE(SUM(a_option_1), 0) 

나는 크게 때문에 음, 내가 생각하는 방법,하지만, 첫 번째 양식을 선호 가능한 한 null. " 성능 문제가 있는지 확실하지 않습니다.

IFNULL도 COALESCE와 같이 완료됩니다. IFNULL은 더 빠르지 만 단 하나의 경우에 최적화되어 있기 때문에 두 개의 인수 만 사용합니다. 나는 그것이 항상 여러 가지 논쟁에서 작동하기 때문에 항상 COALESCE를 사용한다고 생각합니다. 그래서 좀더 일반적이고 쉽게 기억할 수 있습니다.