- CASE表达式的语法
CASE表达式的语法分为简单CASE表达式和搜索CASE表达式。
CASE WHEN <判断表达式> THEN <表达式>
WHEN <判断表达式> THEN <表达式>
WHEN <判断表达式> THEN <表达式>
·
·
ELSE <表达式>
END
WHEN 子句中的<判断表达式>类似与"列=值",返回值为真值(TRUE/FALSE/UNKNOW)的表达式。如果WHEN子句中的<判断表达式>结果为TRUE,那么就返回THEN后面的<表达式>;如果WHEN子句中的<判断表达式>结果为FALSE,那么就跳到下一条WHEN子句的判断之中;如果知道最后WHEN的子句返回值都是FALSE,那么就会返回ELSE中的表达式,执行终止。
- CASE表达式的使用方法
--选取商品种类进行字符串拼接
SELECT shop_name,
CASE WHEN shop_type = '衣服'
THEN CONCAT('A:',shop_type)
WHEN shop_type = '工具'
THEN CONCAT('B:',shop_type)
WHEN shop_type = '厨房用具'
THEN CONCAT('C:',shop_type)
ELSE NULL
END AS abc_shop_type
FROM shop_list;
+-----------+---------------+
| shop_name | abc_shop_type |
+-----------+---------------+
| T恤衫 | A:衣服 |
| 打孔器 | B:工具 |
| 运动T恤 | A:衣服 |
| 菜刀 | C:厨房用具 |
| 砧板 | C:厨房用具 |
| 扳手 | B:工具 |
+-----------+---------------+
- CASE的书写位置
CASE表达式可以书写在任何位置,我们可以利用CASE表达式进行列和行的互换。
SELECT shop_type,SUM(sell_price) AS sum_price
FROM shop_list
GROUP BY shop_type;
+-----------+-----------+
| shop_type | sum_price |
+-----------+-----------+
| 衣服 | 5000 |
| 工具 | 3600 |
| 厨房用具 | 8000 |
+-----------+-----------+
SELECT SUM(CASE WHEN shop_type = '衣服'
THEN sell_price ELSE 0 END) AS sum_price,
SUM(CASE WHEN shop_type = '厨房用具'
THEN sell_price ELSE 0 END) AS sum_price2,
SUM(CASE WHEN shop_type = '工具'
THEN sell_price ELSE 0 END) AS sum_price3
FROM shop_list;
+-----------+------------+------------+
| sum_price | sum_price2 | sum_price3 |
+-----------+------------+------------+
| 5000 | 8000 | 3600 |
+-----------+------------+------------+
第二张表的sum_price,sum_price2,sum_price3代表了第一张表的shop_type的数据。
- 简单CASE表达式
简单CASE表达式比搜索CASE表达式简单,但是会受条件约束,所以通常情况下都会使用搜索CASE表达式。
简单CASE表达式的语法:
CASE <表达式>
WHEN <表达式> THEN <表达式>
WHEN <表达式> THEN <表达式>
WHEN <表达式> THEN <表达式>
·
·
ELSE <表达式>
END
示例:
--选取商品种类进行字符串拼接
SELECT shop_name,
CASE shop_type
WHEN '衣服' THEN CONCAT('A:',shop_type)
WHEN '工具' THEN CONCAT('B:',shop_type)
WHEN '厨房用具' THEN CONCAT('C:',shop_type)
ELSE NULL
END AS abc_shop_type
FROM shop_list;
+-----------+---------------+
| shop_name | abc_shop_type |
+-----------+---------------+
| T恤衫 | A:衣服 |
| 打孔器 | B:工具 |
| 运动T恤 | A:衣服 |
| 菜刀 | C:厨房用具 |
| 砧板 | C:厨房用具 |
| 扳手 | B:工具 |
+-----------+---------------+
简单CASE表达式CASE<列名>的方法虽然简化了写法,但是当WHEN指定不同列的时候,简单CASE就无能为力了。