天天看点

case when then else_CASE语句

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

case when then else_CASE语句
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 when then else_CASE语句

case是对一行数据进行“修改和计算”

下面一个问题

case when then else_CASE语句

输出每一行中,x和y中最大的数,

SELECT 
`key`,
case
when x > y then x
when x <= y then y
end as max_ret

from table2
           

输出

case when then else_CASE语句

把上面的题目扩展一下,再加一列z,取出每一行,x,y,z中最大的

case when then else_CASE语句

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 when then else_CASE语句

这就是在case中,又写了一个case

case就像在表里新增了一列。

参考

https://dev.mysql.com/doc/refman/5.7/en/case.html