2014-02-21 4 views
0

У меня есть следующий mysql-запрос для вычисления суммы баллов студентом. Запрос выполняется успешно, но выводит NULL в поле «Оценка».Почему Sum не работает с несколькими случаями в mysql?

Select regd, Subject, Section, Test_date, 
SUM(t_scored+w_scored+f_scored+cce_scored) as Scoring 
from 
(SELECT regd, Subject, Section, Test_date, 
SUM(CASE WHEN Name_of_exam IN ('First Unit Exam', 'Second Unit Exam', 'Third Unit Exam') 
THEN Mark_score 
END)/SUM(CASE WHEN Name_of_exam IN ('First Unit Exam', 'Second Unit Exam', 'Third Unit Exam') 
THEN Full_Mark 
END)*25 AS t_scored, 

SUM(CASE WHEN Name_of_exam IN ('First Unit Exam', 'Second Unit Exam' 'Third Unit Exam') 
THEN (Full_mark) 
END) AS t_fm, 

SUM(CASE WHEN Name_of_exam IN ('First Term Weekly Test', 'Second Term Weekly Test', 'Third Term Weekly Test', 'Final Term Weekly Test') 
THEN Mark_score 
END)/SUM(CASE WHEN Name_of_exam IN ('First Term Weekly Test', 'Second Term Weekly Test', 'Third Term Weekly Test', 'Final Term Weekly Test') 
THEN Full_Mark 
END)*25 AS w_scored, 

SUM(CASE WHEN Name_of_exam IN ('First Term Weekly Test', 'Second Term Weekly Test', 'Third Term Weekly Test', 'Final Term Weekly Test') 
THEN (Full_mark) 
END) AS w_fm, 

SUM(CASE WHEN Name_of_exam = 'Final Unit Exam' 
THEN Mark_score 
END)/SUM(CASE WHEN Name_of_exam = 'Final Unit Exam' 
THEN Full_Mark 
END)*25 AS f_scored, 

SUM(CASE WHEN Name_of_exam = 'Final Unit Exam' 
THEN (Mark_score) 
END) AS score_m, 

SUM(CASE WHEN Name_of_exam = 'CCE' 
THEN Mark_score 
END)/SUM(CASE WHEN Name_of_exam = 'CCE' 
THEN Full_Mark 
END)*25 AS cce_scored, 

SUM(CASE WHEN Name_of_exam = 'CCE' 
THEN (Full_mark) 
END) AS cce_fm 
FROM kg2_exam 
WHERE regd='2275' AND Subject not in ('Music','Handwriting','Colouring'))t 
group by Subject 

Как вы можете видеть из моего кода, я хочу, чтобы сумма t_scored + w_scored + f_scored + cce_scored. Но здесь код выводит только NULL, тогда как в некоторых полях Mark_score и Full_Mark есть значения. Любая помощь и советы очень приветствуются.

ответ

0

Вы можете попробовать это

SUM(IF(Name_of_exam = 'Final Unit Exam',Mark_score,0)) 

Если вы уверены, возвратные подзапрос действительные результаты и нет необходимости изменять, Вы можете попробовать изменить

SUM(t_scored+w_scored+f_scored+cce_scored) 

к этому

SUM(IF(t_scored IS NULL, 0,t_scored)+IF(w_scored IS NULL, 0,w_scored)+IF(f_scored IS NULL, 0,f_scored)+IF(cce_scored IS NULL, 0,cce_scored)) 

Должно быть NULL где-то, так что 45 + NULL будет NULL

+0

@Skriptajs Первая часть кода SUM (t_score + ... - это тот, который не работает. –

+1

Я обновил свой ответ. Вы должны найти, откуда находятся значения NULL. – Skriptotajs

+0

Большое спасибо, вы действительно спасли мой день. –

Смежные вопросы