I have the following MySQL SELECT
statement. It is working fine except that the code is too long. I have been looking throughout the Internet to figure out how I can make it shorter.
SELECT regd, Subject, Section, date,
SUM(CASE WHEN (Name_of_exam = 'First Unit Exam'
OR Name_of_exam = 'Second Unit Exam'
OR Name_of_exam = 'Third Unit Exam')
THEN (Mark_score / Full_mark) *25 END) AS t_scored,
SUM(CASE
WHEN (Name_of_exam = 'First Unit Exam'
OR Name_of_exam = 'Second Unit Exam'
OR Name_of_exam = 'Third Unit Exam')
THEN (Full_mark) END) AS t_fm,
SUM(CASE
WHEN (Name_of_exam = 'First Term Weekly Test'
OR Name_of_exam = 'Second Term Weekly Test'
OR Name_of_exam = 'Third Term Weekly Test'
OR Name_of_exam = 'Final Term Weekly Test')
THEN (Mark_score / Full_mark) *25
END ) AS w_scored,
SUM(CASE
WHEN (Name_of_exam = 'First Term Weekly Test'
OR Name_of_exam = 'Second Term Weekly Test'
OR Name_of_exam = 'Third Term Weekly Test'
OR Name_of_exam = 'Final Term Weekly Test')
THEN (Full_mark) END ) AS w_fm,
SUM(CASE
WHEN Name_of_exam = 'Final Unit Exam'
THEN (Mark_score / Full_mark) *25
END ) 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 / Full_mark) *25
END ) AS cce_scored,
SUM(CASE
WHEN Name_of_exam = 'CCE'
THEN (Full_mark) END ) AS cce_fm
FROM exam_mark
WHERE regd='23' AND Section='A'
AND date BETWEEN '2013-11-01' AND '2013-11-15'
GROUP BY Subject
Any suggestion is welcome.