码迷,mamicode.com
首页 > 数据库 > 详细

sql case when的使用

时间:2020-11-20 11:53:29      阅读:10      评论:0      收藏:0      [点我收藏+]

标签:end   mysql   字段排序   containe   测试   使用   字段   pre   class   

最近在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)

sql case when的使用

标签:end   mysql   字段排序   containe   测试   使用   字段   pre   class   

原文地址:https://www.cnblogs.com/lanyangsh/p/13978914.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!