CASE WHEN THEN ELSE END
简单 CASE 函数将某个表达式与一组简单表达式进行比较以确定结果。CASE 搜索函数计算一组布尔表达式以确定结果。
简单CASE函数
CASE input_expression
WHEN when_expression THEN
result_expression [...n ] [
ELSE
else_result_expression
END
CASE搜索函数
CASE
WHEN Boolean_expression THEN
result_expression [...n ] [
ELSE
else_result_expression
END
简单CASE函数和CASE搜索函数的区别在于 简单CASE函数用input_expression与when_expression进行对比如果表达式结果为true则返回对应的result_expression,而CASE搜索函数WHEN的后面就是一个Boolean表达式,只要是任何一个返回值为boolean类型的都可以。所以CASE搜索函数可以进行更复杂的运算。
例子
简单CASE函数的例子:
SELECT
CASE user.status
WHEN 2 THEN
CASE user.type
WHEN 1 THEN
user_personal.name
WHEN 2 THEN
user_org.name
END
ELSE NULL
END as `name`,
user_org.province,
user_org.order
FROM user
LEFT JOIN user_personal ON user_personal.user_id = user.id
LEFT JOIN user_org ON user_org.user_id = user.id
CASE搜索函数的例子:
SELECT
CASE
WHEN user.status=2 THEN
user.name
WHEN user.status=1 THEN
'admin'
WHEN user.status=3 THEN
'common'
WHEN user.status>3 and user.status<5 THEN
'nothing'
ELSE NULL
END as `name`,
user.age,
user.type
FROM user
CASE搜索函数还可以在 WHERE 子句中,或者在 GROUP BY 子句中使用 CASE
如:通过在SELECT选项中添加CASE进行分类,在通过GROUP BY进行统计
SELECT
CASE
WHEN status< 3 THEN
'type1'
WHEN status>= 3
AND parent_id < 5 THEN
'type2'
ELSE
'nothing'
END AS status_type,
count(*) AS 'count'
FROM
user
GROUP BY
status_type
ORDER BY
count