CASE表达式
知识点:
● CASE表达式分为简单CASE表达式和搜索CASE表达式两种。搜索CASE表达式包含简单CASE表达式的全部功能。
● 虽然CASE表达式中的ELSE子句可以省略,但为了让 SQL语句更加容易理解,还是希望大家不要省略。
● CASE表达式中的END不能省略。
● 使用CASE表达式能够将SELECT语句的结果进行组合。
● 虽然有些 DBMS提供了各自特有的CASE表达式的简化函数,例如Oracle中的DECODE和MySQL中的IF,等等,但由于它们并非通用的函数,功能上也有些限制,因此有些场合无法使用。
CASE WHEN <求值表达式> THEN <表达式> WHEN <求值表达式> THEN <表达式> WHEN <求值表达式> THEN <表达式> . . . ELSE <表达式> END [as 字段别名]
整个case语句只是1列值。分支语句。
组合使用:
SUM ( CASE
WHEN product_type = '衣服' THEN sale_price
ELSE 0
END
) AS sum_price_clothes,
分支少的时候可以使用sum(if(判断条件,真时返回值,假时返回值))替换
-----------------------------------------------------------
搜索CASE表达式与简单CASE表达式对比
-- 使用搜索CASE表达式的情况(重写代码清单6-41) SELECT product_name, CASE WHEN product_type = '衣服' THEN 'A :' | |product_type WHEN product_type = '办公用品' THEN 'B :' | |product_type WHEN product_type = '厨房用具' THEN 'C :' | |product_type ELSE NULL END AS abc_product_type FROM Product;
-- 使用简单CASE表达式的情况 SELECT product_name, CASE product_type WHEN '衣服' THEN 'A :' | | product_type WHEN '办公用品' THEN 'B :' | | product_type WHEN '厨房用具' THEN 'C :' | | product_type ELSE NULL END AS abc_product_type FROM Product;
简单CASE表达式,虽然看上去简化了书写,但是想要在 WHEN 子句中指定不同列时,简单 CASE 表达式就无能为力了。