简单 CASE 表达式(Simple CASE)
简单 CASE 语句用于直接比较一个表达式的值与一系列可能的值:
CASE expression
WHEN value1 THEN result1
WHEN value2 THEN result2
...
ELSE default_result
END
例如:
CASE sex
WHEN '0' THEN '男'
WHEN '1' THEN '女'
ELSE '未知'
END
在这个例子中,如果变量 sex
的值等于 '0'
,则返回 '男'
;如果等于 '1'
则返回 '女'
;否则返回 '未知'
。
搜索 CASE 表达式(Searched CASE)
搜索 CASE 语句则根据每个 WHEN
后面的布尔表达式的真假
来决定返回哪个结果:
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE default_result
END
例如:
CASE
WHEN status = '0' THEN '已完成'
WHEN status = '1' THEN '已取消'
ELSE '其他状态'
END
这里,如果 status
字段的值等于 '0'
,则返回 '已完成'
;如果是 '1'
则返回 '已取消'
;对于其他所有情况,则返回 '其他状态'
。
CASE
语句不仅可以在 SELECT 子句中用来执行条件计算或转换,还可以在 WHERE、ORDER BY 或其他可以放置表达式的 SQL 语句部分使用。同时,它可以用于聚合函数,如 SUM、COUNT 等,以统计满足特定条件的数据数量。例如:
SELECT
sum(CASE WHEN a.status='0' THEN 1 ELSE 0 END) AS completed_count,
sum(CASE WHEN a.status='1' THEN 1 ELSE 0 END) AS cancelled_count
FROM orders a;
这段代码会分别统计表 orders
中 status
字段值为 '0'
和 '1'
的记录数量。