mysql - 多个 Case 语句不适用于 group by

标签 mysql group-by case

我对 mysql 完全陌生,没有接受过任何编程教育。我通过搜索教程和阅读 stackoverflow 中的答案来自学一切。我的问题是我的语句没有输出任何内容,也没有输出任何错误。所以我完全不明白代码中发生了什么。由于我的模式和语句有点长,我做了一个sqlfiddle here这样你就可以测试自己。

这是我期望的输出。请帮助我。

enter image description 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

FIDDLE

关于mysql - 多个 Case 语句不适用于 group by,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20486307/

相关文章:

mysql - 在 MySql 中更改/更改列名称时出错?

php - 如何省略某些字段中包含零的记录?

mysql - SQL:按不变状态间隔长度分组

java - Datanucleus jdoql 组通过具有 avg()

C# Selenium WebDriver 开关/案例

php - 如何使用 PHP 从 MySQL 数据库获取响应

mysql - MariaDB 的 TIMESTAMP、CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP 错误

mysql group by uid 哪个uid与另一个查询匹配

Python:如何测试 IF 语句对 Dictionary Case 语句的效率?

case - VHDL:使用是否正确无关?