Case When语句
先执行第一个条件,然后执行第二个条件。。。依次类推
SELECT 列名,
CASE WHEN [condition] THEN result
WHEN [condition] THEN result
WHEN [condition] THEN result
WHEN [condition] THEN result
…
ELSE result END
FROM table_name;
IF语句
IF (condition,result_true,result_false),AS table_name
判断空值Null Value
通过IS NULL语句判断是否为空值
CASE WHEN 列名 IS NULL THEN 'TRUE' ELSE 'FALSE' END
注:在工作中以下三种情况(① NULL ②‘NULL’③ (全部是空格))都是无 效值,但在用代码处理时处理方法有不同的处理方法,所以要用不同的语句根据不 同的情况进行更改。
练习
USE ClassicModels;
给OrderDetails新加两列
列1: Price_Range, 基于priceEach获得
添加一个名为Price_Range的列,在OrderDetails中有一列名为priceEach(单 价),单价有不同的数值,新的一列的内容是根据单价判断后的内容,是便宜中等还是贵,具体的判断标准如下: 0 <= priceEach <= 50, Cheap 51 <= priceEach <= 100, Medium priceEach >= 101, Expensive (此列用case when完成)
列2: Volume_Range, 基于quantityOrdered获得
添加一个名为Volume_Range的列,在OrderDetails中有一列名为 quantityOrdered(订单数量), 订单数量有不同的数值,新的一列的内容是根据订单数量判断后的内容,是高还是低,具体的判断标准如下: quantityOrdered <= 40, Low quantityOrdered > 40, High (此列用IF或Case when完成)
提示:可以通过一段话来创造2个新的列。
答案
#调用数据库
USE ClassicModels;
## 给OrderDetails新加两列
/* 列1: Price_Range, 基于priceEach获得
0 <= priceEach <= 50, Cheap
51 <= priceEach <= 100, Medium
priceEach >= 101, Expensive
此列用case when完成
*/
SELECT priceEach,
(CASE WHEN priceEach BETWEEN 0 AND 50 THEN 'Cheap'
WHEN priceEach BETWEEN 51 AND 100 THEN 'Medium'
ElSE 'Expensive' END) AS Price_Range
FROM orderdetails;
/*列2: Volume_Range, 基于quantityOrdered获得
quantityOrdered <= 40, Low
quantityOrdered > 40, High
此列用IF或Case when完成
*/
SELECT quantityOrdered,
(IF(quantityOrdered<=40 ,'Low', 'High')) AS Volume_Range1
FROM orderdetails;
SELECT quantityOrdered,
(CASE WHEN quantityOrdered<=40 THEN 'Low'
ELSE 'High' END) AS Volume_Range2
FROM orderdetails;