zoukankan      html  css  js  c++  java
  • Excel & SQL | 控制函数 | 04

    上表存储了每位同学的id、name (姓名)、class (班级)和score(成绩)四个字段。我们把上表中的数据存储在demo数据库的chapter8表中。

    if()函数

    对于Excel中的if()函数,读者应该都比较熟悉了,SQL中的if()函数与Excel中的原理基本一样,也是用来对某一个条件进行判断的,这里的判断主要就是我们前面讲过的比较运算。如果条件满足,则返回一个值;如果条件不满足,则返回另一个值。具体实现形式如下:

    if(condition,a,b)
    

    如果condition为真,则返回a值,否则返回b值。判断流程如下图所示。

    现在我们要对某个分数进行判断,如果分数大于或等于60分,则返回“及格”,否则返回“不及格”,可以通过如下代码实现:

    select if(50>=60,"及格";"不及格")
    

    运行上面的代码,最后返回的结果为不及格。
    如果我们要对表中某一列的每个值进行判断,只需要把上面代码中的50换成对应的列名即可,这样就是将该列中的每个值与60进行比较。比如,我们要对chapter8表中的每位同学的成绩进行判断,可以通过如下代码实现︰

    select id,score,if(score>=60,"及格","不及格") as score_result from chapter8;
    

    上面的例子利用的是简单的if()函数,if()函数还可以进行嵌套,也就是if()函数中还是if()函数。比如,我们要对某个分数进行判断,如果小于60分,则返回不及格,如果不小于60分但是小于80分,则返回良好,否则返回优秀,可以通过如下代码实现︰

    select id,score,if(score<60,"不及格",if(score<80,"良好","优秀")) as score_result from chapter8;
    

    case when函数

    上面我们讲了多层if嵌套,就是先判断condition是否满足某个条件,如果满足,则返回一个值或进行下一个if判断;如果不满足,则返回一个值或进行下一个if判断。

    虽然多层嵌套的原理比较简单,但是如果层数太多,读者还是会容易写混的,基于此,就有了这一节要讲的case when函数。case when函数主要有如下两种书写形式。

    形式1:

    case列名
    	when 条件1 then返回值1
    	when 条件2 then返回值2
    	...
    	when 条件n then返回值n
    	else 返回默认值
    end
    
    注意:没有逗号!不要忘记end!
    

    形式1是对某一列进行多层判断,如果这一列中的值满足条件1,则返回值1﹔如果这一列中的值满足条件2,则返回值2﹔如果这一列中的值满足条件n,则返回值n ;如果前面的n个条件都不满足,则返回指定的默认值﹔最后以end结束,且end一定要有。需要注意的是,形式1的条件只能是具体的值,而不能进行比较运算,如果进行比较运算会报错。

    现在我们有这样一个需求,对chapter8表中class列的值进行替换,如果是一班,则返回class1;如果是二班,则返回class2;如果是三班,则返回class3,否则返回其他。这个需求可以通过如下代码实现:

    select id,class,(case class
                    when "一班" then "class1"
                    when "二班" then "class2"
                    when "三班" then "class3"
                    else "其他"
                    end) as class_result from chapter8;
    

    形式2:

    case
    	when 列名满足条件1 then返回值1
    	when 列名满足条件2 then返回值2
    	...
    	when 列名满足条件n then返回值n
    	else 返回默认值
    end
    

    形式1不支持对列名进行比较运算,但是形式2是支持的,比如,前面讲过的多层if嵌套就可以通过形式2来实现,具体实现代码如下:

    select id,score,(case
                    when score<60 then "不及格"
                    when score<80 then "良好"
                    when score<100 then "优秀"
                    else "可有可无 只是语法测试"
                    end) as score_result from chapter8;
                    
    

    小结

    sql的if语句
    	select if(50>=60,"yes","no");
    	select id,score,if(score>=60,"及格","不及格") as score_result from chapter8;
    	select id,score,if(score<60,"不及格",if(score<80,"良好","优秀")) as score_result from chapter8;
    	
    case when
    	基于对列的常量判断
    	select id,class,(case class
                    when "一班" then "class1"
                    when "二班" then "class2"
                    when "三班" then "class3"
                    else "其他"
                    end) as class_result from chapter8;
        基于对整列进行判断
    	select id,score,(case
                    when score<60 then "不及格"
                    when score<80 then "良好"
                    when score<100 then "优秀"
                    else "可有可无 只是语法测试"
                    end) as score_result from chapter8;
    	
    	
    	
    
  • 相关阅读:
    Add a column in table control
    ALV
    ABAP Object Differences
    Field Symbols, Casting Decimal Places
    fROM PPV report
    python全局变量
    管理商品demo
    Mac系统在Pycharm中切换解释器
    python中 元组
    python中字符串格式化
  • 原文地址:https://www.cnblogs.com/Rowry/p/15093878.html
Copyright © 2011-2022 走看看