1.简单函数 CASE [col_name] WHEN [value1] THEN [result1]…ELSE [default] END
现在有如上的表,想要自定义每个人物使用的武器,可以使用如下的语句
select 人物"英雄",case 人物 when "诸葛亮" then "扇子" when "吕布" then "方天画戟"
else"不使用武器" end"使用的武器" from sanguo
运行结果
2. 搜索函数 CASE WHEN [expr] THEN [result1]…ELSE [default] END
搜索函数可以进行判断,并且搜索函数只会返回第一个符合条件的值,其他case
被忽略
select 人物'英雄', age'年龄', case when age>30 and case<40 then '壮年' when age>40 and
age<50 then'中年' else '老年' end'状态' from sanguo
查询结果 其中 语句中的人物'英雄' 和 人物 as 英雄 是同样效果.
建表语句和数据插入
CREATE TABLE `edu_student` (
`stu_id` VARCHAR (16) NOT NULL COMMENT '学号',
`stu_name` VARCHAR (20) NOT NULL COMMENT '学生姓名',
PRIMARY KEY (`stu_id`)
) COMMENT = '学生表' ENGINE = INNODB;
CREATE TABLE `edu_courses` (
`course_no` VARCHAR (20) NOT NULL COMMENT '课程编号',
`course_name` VARCHAR (100) NOT NULL COMMENT '课程名称',
PRIMARY KEY (`course_no`)
) COMMENT = '课程表' ENGINE = INNODB;
CREATE TABLE `edu_score` (
`stu_id` VARCHAR (16) NOT NULL COMMENT '学号',
`course_no` VARCHAR (20) NOT NULL COMMENT '课程编号',
`scores` FLOAT NULL DEFAULT NULL COMMENT '得分',
PRIMARY KEY (`stu_id`, `course_no`)
) COMMENT = '成绩表' ENGINE = INNODB;
INSERT INTO edu_student (stu_id, stu_name)
VALUES
('1', '小李'),
('2', '小王'),
('3', '小张'),
('4', '小孙'),
('5', '小刘'),
('6', '小龟');
INSERT INTO edu_courses (course_no, course_name)
VALUES
('C1', '渣男的自我修养'),
('C2', '如何讨得富婆欢心'),
('C3', '少奋斗三十年')
INSERT INTO edu_score (stu_id, course_no, scores)
VALUES
('1','c1','60'),('1','c2','75'),('1','c3','94'),
('2','c1','84'),('2','c2','76'),('2','c3','46'),
('3','c1','25'),('3','c2','89'),('3','c3','86'),
('4','c1','99'),('4','c2','92'),('4','c3','67'),
('5','c1','62'),('5','c2','20'),('5','c3','73'),
('6','c1','100'),('6','c2','98'),('6','c3','96')
查询结果
select stu.stu_id as 学号,stu.stu_name as 名字,sum(case co.course_name when '渣男的自我修养' then sc.scores else 0 end) '渣男的自我修养' ,
sum(case co.course_name when '如何讨得富婆欢心' then sc.scores else 0 end) '如何讨得富婆欢心' ,
sum(case co.course_name when '少奋斗三十年' then sc.scores else 0 end) '少奋斗三十年'
FROM
edu_student stu
LEFT JOIN edu_score sc ON stu.stu_id = sc.stu_id
LEFT JOIN edu_courses co ON co.course_no = sc.course_no
GROUP BY
stu.stu_id