case语句有两种写法
简单表达式
CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list] ...
[ELSE statement_list]
END CASE
搜索表达式
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
下面是两种实际的用法
搜索式
select
case
WHEN age >= 18 THEN 'adult'
WHEN AGE < 18 THEN 'child'
else '其他'
end
from Student2
简单式
select
case sex
WHEN 1 THEN '男'
WHEN 0 THEN '女'
else '其他'
end
from Student2
这里有个奇怪的地方,MySQL的官方文档是 end case结尾的,但我在使用时,不能在end后加case,加上反而报语法错误,不加正常。
搜索式的用法更广一些,能写的条件比较多。
用法示例
some_table
select
case name
WHEN '临汾' THEN '山西'
WHEN '太原' THEN '山西'
WHEN '石家庄' THEN '河北'
WHEN '保定' THEN '河北'
else '其他'
end as province,
sum(count)
from some_table
GROUP BY
case name
WHEN '临汾' THEN '山西'
WHEN '太原' THEN '山西'
WHEN '石家庄' THEN '河北'
WHEN '保定' THEN '河北'
else '其他'
end
或者另一种写法,
select
case name
WHEN '临汾' THEN '山西'
WHEN '太原' THEN '山西'
WHEN '石家庄' THEN '河北'
WHEN '保定' THEN '河北'
else '其他'
end as province,
sum(count)
from some_table
GROUP BY province
输出
case是对一行数据进行“修改和计算”
下面一个问题
输出每一行中,x和y中最大的数,
SELECT
`key`,
case
when x > y then x
when x <= y then y
end as max_ret
from table2
输出
把上面的题目扩展一下,再加一列z,取出每一行,x,y,z中最大的
表
SQL
SELECT
`key`,
case
when x > y then
case
when x > z then x
when x < z then z
end
when x <= y then
case
when y > z then y
when y < z then z
end
end as max_ret
from table2
输出
这就是在case中,又写了一个case
case就像在表里新增了一列。
参考
https://dev.mysql.com/doc/refman/5.7/en/case.html