我对 mysql 完全陌生,没有接受过任何编程教育。我通过搜索教程和阅读 stackoverflow 中的答案来自学一切。我的问题是我的语句没有输出任何内容,也没有输出任何错误。所以我完全不明白代码中发生了什么。由于我的模式和语句有点长,我做了一个sqlfiddle here这样你就可以测试自己。
这是我期望的输出。请帮助我。
这是我尝试的查询:
SELECT regd, Subject, Section, Test_date,
(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,
(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,
(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,
(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,
(CASE
WHEN Name_of_exam = 'Final Unit Exam'
THEN (Mark_score / Full_mark) *25
END ) AS f_scored,
(CASE
WHEN Name_of_exam = 'Final Unit Exam'
THEN (Mark_score) END ) AS score_m,
(CASE
WHEN Name_of_exam = 'CCE'
THEN (Mark_score / Full_mark) *25
END ) AS cce_scored,
(CASE
WHEN Name_of_exam = 'CCE'
THEN (Full_mark) END ) AS cce_fm
FROM exam
WHERE regd='2321' AND Section='A'
AND Test_date BETWEEN '2013-11-01' AND '2013-11-15'
GROUP BY Subject
更新:Name_of_exam
领域有三项单元考试、四项每周测试、一项期末考试和一项 CCE。需要计算三个单元考试即第一单元考试、第二单元考试、第三单元考试的25%,当然可以通过三个单元考试的分数总和除以三个单元考试的full_marks总和来计算单元考试。其次,我们有四次每周测试,即第一学期每周测试、第二学期每周测试、第三学期每周测试和期末每周测试。在所有每周测试中,一名学生可以对同一科目进行多次测试。我想计算所有每周测试的mark_scored总和的25%,可以通过将所有测试的分数总和除以所有每周测试的满分总和来计算。我想从 CCE 和期末单元考试中拿出 25%。我们有 4 个 25%,总共 100 个。
最佳答案
这是查询:
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 exam
WHERE regd='2321' AND Section='A'
GROUP BY Subject
关于mysql - 多个 Case 语句不适用于 group by,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20486307/