标签: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)
按照性别查询,定义新字段性别
:
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)
下面的例子中,使用两个字段进行组合case when。
当sex
为male
,并且 score > 90
,则加上标签smart boy
。
当sex
为female
,并且 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)
定义新字段,并按照新字段排序。
按照score
区间进行划分:
score > 90
等级180 < score <= 90
等级270 < score <= 80
等级3score <= 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)
标签:end mysql 字段排序 containe 测试 使用 字段 pre class
原文地址:https://www.cnblogs.com/lanyangsh/p/13978914.html