- CASE表達(dá)式的語法
CASE表達(dá)式的語法分為簡單CASE表達(dá)式和搜索CASE表達(dá)式好啰。
CASE WHEN <判斷表達(dá)式> THEN <表達(dá)式>
WHEN <判斷表達(dá)式> THEN <表達(dá)式>
WHEN <判斷表達(dá)式> THEN <表達(dá)式>
·
·
ELSE <表達(dá)式>
END
WHEN 子句中的<判斷表達(dá)式>類似與"列=值"瞬铸,返回值為真值(TRUE/FALSE/UNKNOW)的表達(dá)式行剂。如果WHEN子句中的<判斷表達(dá)式>結(jié)果為TRUE丐巫,那么就返回THEN后面的<表達(dá)式>饺谬;如果WHEN子句中的<判斷表達(dá)式>結(jié)果為FALSE,那么就跳到下一條WHEN子句的判斷之中冬殃;如果知道最后WHEN的子句返回值都是FALSE囚痴,那么就會(huì)返回ELSE中的表達(dá)式,執(zhí)行終止审葬。
- CASE表達(dá)式的使用方法
--選取商品種類進(jìn)行字符串拼接
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:工具 |
| 運(yùn)動(dòng)T恤 | A:衣服 |
| 菜刀 | C:廚房用具 |
| 砧板 | C:廚房用具 |
| 扳手 | B:工具 |
+-----------+---------------+
- CASE的書寫位置
CASE表達(dá)式可以書寫在任何位置深滚,我們可以利用CASE表達(dá)式進(jìn)行列和行的互換。
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的數(shù)據(jù)涣觉。
- 簡單CASE表達(dá)式
簡單CASE表達(dá)式比搜索CASE表達(dá)式簡單痴荐,但是會(huì)受條件約束,所以通常情況下都會(huì)使用搜索CASE表達(dá)式官册。
簡單CASE表達(dá)式的語法:
CASE <表達(dá)式>
WHEN <表達(dá)式> THEN <表達(dá)式>
WHEN <表達(dá)式> THEN <表達(dá)式>
WHEN <表達(dá)式> THEN <表達(dá)式>
·
·
ELSE <表達(dá)式>
END
示例:
--選取商品種類進(jìn)行字符串拼接
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:工具 |
| 運(yùn)動(dòng)T恤 | A:衣服 |
| 菜刀 | C:廚房用具 |
| 砧板 | C:廚房用具 |
| 扳手 | B:工具 |
+-----------+---------------+
簡單CASE表達(dá)式CASE<列名>的方法雖然簡化了寫法生兆,但是當(dāng)WHEN指定不同列的時(shí)候,簡單CASE就無能為力了膝宁。