【问题标题】:if condiation and group by condiation not work如果条件和按条件分组不起作用
【发布时间】:2019-04-13 15:10:48
【问题描述】:

我有mark 表。我在这里存储所有主题标记。我存储like gpa=3.5gpa=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

表格

【问题讨论】:

    标签: php mysql codeigniter mysqli


    【解决方案1】:

    您遇到的问题是IFSUM 之后应用,SUM 只是将作为字符串的gpa 值(例如'f')视为0 值,这意味着SUM 是总是数字(并且永远不等于'f')。您需要做的是在SUM 时检查 gpa 值,然后在这种情况下使用特殊值(例如 -9999)来生成结果,例如

    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
    

    【讨论】:

    • 有些问题IF(SUM(IF(gpa='f' OR gpa='F',-9999,gpa)) >= 0,CAST(IF(subject_type=1, SUM(gpa)-2 /count(subject_name) ,SUM(gpa)/COUNT(subject_name)) AS CHAR), 'F') as total_gpa 每次工作else contation IF(subject_type=1, SUM(gpa)-2 /count(subject_name) ,SUM(gpa)/COUNT(subject_name)) 。如果感染则不起作用。再次帮助我
    • @HasanSheikh 我不确定你在说什么。你能在SQLFiddle 上创建一个演示给我看吗?您可能还想考虑创建一个新问题,因为在接下来的几天里我没有太多时间来查看它。
    • @HasanSheikh 顺便说一句,我创建了一个新的演示 here,但它没有显示问题。
    • 我的新问题怎么能提到你
    • 我不知道你的意思是什么?您只需使用“”按钮开始一个新问题。
    猜你喜欢
    • 2012-07-11
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-30
    • 1970-01-01
    相关资源
    最近更新 更多