CASE表达式是用来判断条件的,条件成立时返回某个值,条件不成立时返回另一个值。
语法:
CASE WHEN ComparsionCondition THEN result
WHEN ComparsionCondition THEN result
ELSE other
END
(注:各分支返回的数据类型需一致。)
(注:when子句一定要有排他性,因为当when子句为真时,剩余的when子句会被忽略。)
CASE表达式的用途:
1,转换现有的编码方式
例子:
student_name score Ming 80 Red 92 Huzi 100 Mung 60
student_name score
Ming 良
Red 优
Huzi 优
Mung 中
SELECT student_name, (CASE WHEN score>=90 THEN '优' WHEN score<90 AND score>=75 THEN '良' WHEN score<75 AND score>=60 THEN '中' ELSE '不及格' END) AS score FROM Score;
2,构建交叉表
例子:
Date Result 1900-1-1 胜 1900-1-1 胜 1900-1-1 负 1900-1-2 胜 1900-1-2 胜
胜 负
1900-1-1 2 1
1900-1-2 2 0
SELECT DISTINCT Date, SUM(CASE WHEN Result='胜' THEN 1 ELSE 0 END) AS '胜', SUM(CASE WHEN Result='负' THEN 1 ELSE 0 END) AS '负' FROM Test GROUP BY Date;
3,行列转换
product_type sum_price clothes 5000 office 600 kitchen 10000
sum_price_clothes sum_price_office sum_price_kitchen
5000 600 10000
SELECT SUM(CASE WHEN product_type = '衣服' THEN sale_price ELSE 0 END) AS sum_price_clothes, SUM(CASE WHEN product_type = '办公用品' THEN sale_price ELSE 0 END) AS sum_price_office, SUM(CASE WHEN product_type = '厨房用品' THEN sale_price ELSE 0 END) AS sum_price_kitchen FROM Product;
4,生成特定排序方式
例子:对下表按B、D、C、A的顺序进行排序
item x y z A 1 2 3 B 5 5 2 C 4 7 1 D 3 3 8
SELECT item, x, y, z FROM t ORDER BY ( CASE WHEN item="B" THEN 1 WHEN item="D" THEN 2 WHEN item="C" THEN 3 WHEN item="A" THEN 4 ELSE NULL END );