case when語句,用於計算條件列表並返回多個可能結果表達式之一。CASE 具有兩種格式:1.when when_expression,是使用簡單 CASE 格式時所計算的表達式。Input_expression 是任何有效的SQL表達式。2.when Boolean_expression,使用... ...
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;