case when语句,用于计算条件列表并返回多个可能结果表达式之一。
CASE 具有两种格式:
1、简单 case 函数:
case input_expression when when_expression then result_expression [ ...n ] [ else else_result_expression end
2、case 搜索函数:
case when Boolean_expression then result_expression [ ...n ] [ esle else_result_expression end
参数:
input_expression
是使用简单 CASE 格式时所计算的表达式。Input_expression 是任何有效的SQL表达式。
when when_expression
使用简单 CASE 格式时 input_expression 所比较的简单表达式。when_expression 是任意有效的SQL表达式。input_expression 和每个 when_expression 的数据类型必须相同,或者是隐性转换。
[ ...n ]占位符
可以使用多个 when when_expression then result_expression 子句或 WHEN boolean_expression THEN result_expression 子句
then result_expression
当 input_expression = when_expression 取值为 true,或者 boolean_expression 取值为 true 时返回的表达式。
result expression 是任意有效的sql表达式。
esle else_result_expression
当比较运算取值不为 TRUE 时返回的表达式。如果省略此参数并且比较运算取值不为 TRUE,CASE 将返回 NULL 值。else_result_expression 是任意有效的sql表达式。Else_result_expression 和所有 result_expression 的数据类型必须相同,或者必须是隐性转换。
when Boolean_expression
使用 case 搜索格式时所计算的布尔表达式。boolean_expression 是任意有效的布尔表达式。
结果类型
从 result_expressions 和可选 else_result_expression 的类型集合中返回最高的优先规则类型
创建要操作函数使用的表:
drop table if exists test_list; create table test_list( id int primary key auto_increment comment 'id自增', age int not null comment'年龄', name varchar(225) not null, sex int not null default '1' comment'性别1男,2是女' )engine=MyISAM default charset=utf8 comment'测试查询函数表'; insert into test_list values(1,10,'张一',1),(2,15,'张二',2),(3,20,'张三',1),(4,25,'张四',2),(5,30,'张五',1);
简单 case函数实例:
-- 统计年龄,姓名条件的 select count(case age when 10 then age else null end) as age_num,count(case name when '张五' then name end) as name_num from test_list;
case 搜索函数实例:
-- 统计年龄,姓名条件的 select count(case when age between 10 and 30 then age else null end) as age_num,count(case when name='张五' then name end) as name_num from test_list;
排序使用case when 搜索函数:
-- case 排序 select * from test_list order by case when age>10 then sex end desc;