如果条件和分组条件不起作用

plupiseo  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(581)

我有 mark table。我把所有的主题标记都存储在这里。我储存
like gpa=3.5 或者 gpa=F 现在我想 marksheet 所以我需要 group by . 我想如果一个学生得到任何科目 gpa =F 结果表只显示 Fail/f 在此处查询

CREATE VIEW result as SELECT name as name,roll as roll,class as 
class,subject_name as subject,exam_type as exam_type,sum(full_mark) as 
full_mark,sum(getmark) as getmark, if(gpa =='f', 'F',sum(gpa)) as 
total_gpa FROM mark GROUP by roll,class,exam_type

table

km0tfn4u

km0tfn4u1#

你的问题是 IFSUM 以及 SUM 简单地处理gpa的字符串值(例如。 'f' )值为0表示 SUM 始终是数字(从不等于 'f' ). 你需要做的是检查你的gpa值 SUM 它,然后在这种情况下使用一个特殊值(例如-9999)使结果小于0,然后您可以测试总和小于0,并将其作为给出“f”结果的条件,例如。

IF(SUM(IF(gpa='f' OR gpa='F',-9999,gpa)) >= 0,
      CAST(SUM(gpa) AS CHAR), 'F') AS total_gpa

注意,因为 IF 是文本,我们必须 SUM 作为文本太多,以获得正确的结果。
我在sqlfiddle上创建了一个小演示:

create table grades (id int, gpa varchar(20));
insert into grades values (1, 4), (1, 5), (2, 3), (2, 'f');
select IF(SUM(IF(gpa='f' OR gpa='F',-9999,gpa)) >= 0,
          CAST(SUM(gpa) AS CHAR), 'F') AS total_gpa
from grades 
group by id

输出:

total_gpa
9
F

相关问题