1. 概述
MySQL的 case when 语句用于对一组数据进行根据条件的判断并实施不同的操作。该操作可以利用字面值、函数或者其他表达式,产生复杂的逻辑判断。
case when的语法:
SELECT
CASE expression
WHEN value1 THEN result1
WHEN value2 THEN result2
...
ELSE default_result
END
FROM table
在expression(要比较的值)后,列出了一组value/result对。如果expression的值与列表中的value值相匹配,则返回相应的result。如果没有匹配的值,则返回默认值(default_result)。
2. 用法示例
2.1. 示例1
将order表中的price字段值大于等于3000的行的is_cheap字段的值设置为1,其它行设置为0。
UPDATE order
SET is_cheap =
case when price>=3000 then 1
else 0
end;
2.2. 示例2
查询顾客名,如果顾客订购金额小于5000,则将顾客类型标记为“小客户”,否则标记为“大客户”。
SELECT
name,
CASE
WHEN sum(order_money) < 5000 THEN '小客户'
ELSE '大客户'
END AS customer_type
FROM orders
GROUP BY name
2.3. 示例3
查询学生的总成绩,如果成绩在60分及以上,则输出“及格”,否则输出“不及格”
SELECT
student_name,
sum(score) as total_score,
CASE
WHEN sum(score) >= 60 THEN '及格'
ELSE '不及格'
END AS pass_or_not
FROM scores
GROUP BY student_name
2.4. 示例4
查询订单的总价和优惠后的总价,如果优惠后的总价小于总价的10%,则打上“好买家”的标签并将两个总价及打标签后的结果输出。
SELECT
sum(price) as total_price,
CASE
WHEN sum(price)*0.9 <= sum(discounted_price) THEN '好买家'
ELSE ''
END AS is_good_buyer,
sum(discounted_price) as total_discounted_price
FROM orders