sql case when的两种写法

平时sql开发中,case when 是非常常用的,下面介绍开发中case when 的两种写法

  1. case when 的字段值为枚举类型时

这里我们以用户的性别为例,有用户表user,其中有性别字段sex有三个枚举值 0、1、2
首先我们创建user表,建表语句如下

CREATE TABLE `user` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  `name` varchar(20) DEFAULT NULL COMMENT '用户名',
  `sex` tinyint(4) DEFAULT NULL COMMENT '性别,0:男,1:女,2:未知',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

插入数据

INSERT INTO `user` (`id`, `name`, `sex`) VALUES ('1', '李浩', '0');
INSERT INTO `user` (`id`, `name`, `sex`) VALUES ('2', '张萌', '1');
INSERT INTO `user` (`id`, `name`, `sex`) VALUES ('3', '王洁', '1');
INSERT INTO `user` (`id`, `name`, `sex`) VALUES ('4', '苏源', '2');

查询用户表,可以看到数据如下
图1.user表数据
下面我们使用case when 使得查询结果中sex的值显示为汉字
1)0:男
2)1:女
3)2:未知
查询sql如下

select id
,name
,case sex when 0 then '男' when 1 then '女' else '未知' end as sex
from user;

执行后查询结果如下
图2.枚举类型查询结果

  1. case when 的字段值不是枚举类型时,而是根据一定的条件进行处理
    我们以学生成绩表为例,student_score有三个字段,id(自增主键)、student_name(姓名)、score(分数)
    首先我们创建表,sql语句如下
CREATE TABLE `score_info` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  `student_name` varchar(20) DEFAULT NULL COMMENT '姓名',
  `score` int(11) DEFAULT NULL COMMENT '分数',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

插入若干条数据

INSERT INTO `score_info` (`id`, `student_name`, `score`) VALUES ('1', '张三', '80');
INSERT INTO `score_info` (`id`, `student_name`, `score`) VALUES ('2', '李四', '59');
INSERT INTO `score_info` (`id`, `student_name`, `score`) VALUES ('3', '王五', '75');
INSERT INTO `score_info` (`id`, `student_name`, `score`) VALUES ('4', '张萌', '90');
INSERT INTO `score_info` (`id`, `student_name`, `score`) VALUES ('5', '李子天', '65');
INSERT INTO `score_info` (`id`, `student_name`, `score`) VALUES ('6', '孙静芙', '50');
INSERT INTO `score_info` (`id`, `student_name`, `score`) VALUES ('7', '陈妙语', '96');

查询成绩表,可以看到数据如下
图3.成绩表
现在我们想使用case when 对学生成绩划分等级,规则如下
1)小于60分:不及格
2)大于等于60,小于80分:良好
3)大于80分:优秀
sql如下

select id 
,student_name
,score
,case 
	when score < 60 then '不及格' 
	when score >= 60 and score < 80 then '良好'
	when score >= 80 then '优秀'
end as rank
from score_info
order by score desc;

执行后查询结果如下
图4.case when条件查询结果
最后,总结一下两种写法的不同
1)枚举型:case 字段 when 值 then 结果
2)条件型:case when 条件(字段) then 结果

猜你喜欢

转载自blog.csdn.net/u012693016/article/details/96702309