• sql case when的使用


    最近在sql使用中,发现 case when 的功能相当强大。

    可以根据现有字段定义新的字段,可以对新字段进行排序等等。

    下面简单举例说明。

    用来测试的数据表内容如下:

    mysql> select * from test_student;
    +----+------+-----+--------+-------+
    | id | name | age | sex    | score |
    +----+------+-----+--------+-------+
    | 19 | John |  18 | male   |    90 |
    | 20 | Lily |  17 | female |    89 |
    | 21 | Jim  |  17 | male   |    92 |
    | 22 | Alex |  16 | male   |    70 |
    | 23 | Bell |  19 | ''     |    68 |
    +----+------+-----+--------+-------+
    5 rows in set (0.00 sec)
    

    例子1

    按照性别查询,定义新字段性别

    mysql> select id, name, case sex when 'male' then '男' when 'female' then '女' else 'unknown' end as '性别' from test_student;
    +----+------+---------+
    | id | name | 性别    |
    +----+------+---------+
    | 19 | John | 男      |
    | 20 | Lily | 女      |
    | 21 | Jim  | 男      |
    | 22 | Alex | 男      |
    | 23 | Bell | unknown |
    +----+------+---------+
    5 rows in set (0.00 sec)
    

    或者使用如下方式:

    mysql> select id, name, case when sex = 'male' then '男' when sex = 'female' then '女' else 'unknown' end as '性别' from test_student;
    +----+------+---------+
    | id | name | 性别    |
    +----+------+---------+
    | 19 | John | 男      |
    | 20 | Lily | 女      |
    | 21 | Jim  | 男      |
    | 22 | Alex | 男      |
    | 23 | Bell | unknown |
    +----+------+---------+
    5 rows in set (0.00 sec)
    

    例子2

    下面的例子中,使用两个字段进行组合case when。

    sexmale,并且 score > 90,则加上标签smart boy

    sexfemale,并且 score > 90,则加上标签smart girl

    其他情况,则为unknown

    
    mysql> select id, name, age, sex, score, case when sex = 'male' and score > 90 then 'smart boy' when sex = 'female' and score > 90 then 'smart girl' else 'unknown' end as 'label' from test_student;
    +----+------+-----+--------+-------+-----------+
    | id | name | age | sex    | score | label     |
    +----+------+-----+--------+-------+-----------+
    | 19 | John |  18 | male   |    90 | unknown   |
    | 20 | Lily |  17 | female |    89 | unknown   |
    | 21 | Jim  |  17 | male   |    92 | smart boy |
    | 22 | Alex |  16 | male   |    70 | unknown   |
    | 23 | Bell |  19 | ''     |    68 | unknown   |
    +----+------+-----+--------+-------+-----------+
    5 rows in set (0.00 sec)
    

    例子3

    定义新字段,并按照新字段排序。

    按照score区间进行划分:

    • score > 90 等级1
    • 80 < score <= 90 等级2
    • 70 < score <= 80 等级3
    • score <= 70 等级4

    并按照等级进行排序。

    mysql> select id,name,age, sex,score, case when score > 90 then 1 when score > 80 and score <= 90 then 2 when score > 70 and score <= 80 then 3 else 4 end as honor_level from test_student order by honor_level;
    +----+------+-----+--------+-------+-------------+
    | id | name | age | sex    | score | honor_level |
    +----+------+-----+--------+-------+-------------+
    | 21 | Jim  |  17 | male   |    92 |           1 |
    | 19 | John |  18 | male   |    90 |           2 |
    | 20 | Lily |  17 | female |    89 |           2 |
    | 22 | Alex |  16 | male   |    70 |           4 |
    | 23 | Bell |  19 | ''     |    68 |           4 |
    +----+------+-----+--------+-------+-------------+
    5 rows in set (0.00 sec)
    

    再例如,

    根据sex字段,定义新字段sex_int,并按照sex_int进行排序:

    mysql> select *, case when sex = 'male' then 1 when sex = 'female' then 2 else 3 end as sex_int from test_student order by sex_int;
    +----+------+-----+--------+-------+---------+
    | id | name | age | sex    | score | sex_int |
    +----+------+-----+--------+-------+---------+
    | 19 | John |  18 | male   |    90 |       1 |
    | 21 | Jim  |  17 | male   |    92 |       1 |
    | 22 | Alex |  16 | male   |    70 |       1 |
    | 20 | Lily |  17 | female |    89 |       2 |
    | 23 | Bell |  19 | ''     |    68 |       3 |
    +----+------+-----+--------+-------+---------+
    5 rows in set (0.00 sec)
    
  • 相关阅读:
    xmlHttp.js.rar 没啥说的。。各浏览器都支持的纯ajax!
    实用正则表达式(实用篇) [转]
    Jquery的好书[pdf,新书]
    xml 中的冒号 读取问题的解决
    给一个DataTable 添加一列,来保存计算出来的结果。。
    悟透JavaScript(转) 超级精华
    当前标识符读写权限
    ie浏览器开机自动启动且全屏
    SQL Server ErrorLog 错误日志(如果数据库所占空间变大)
    利用Git hub创建博客
  • 原文地址:https://www.cnblogs.com/lanyangsh/p/13978914.html
Copyright © 2020-2023  润新知