MySQL - CASE WHEN的高級用法


Case語法

CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    WHEN conditionN THEN resultN
    ELSE result
END;

預制數據

mysql> select * from person;
+----+---------+--------+------+--------+
| id | country | name   | age  | gender |
+----+---------+--------+------+--------+
|  3 | china   | tim    |   10 |      1 |
|  7 | usa     | kobe   |   10 |      1 |
|  8 | usa     | james  |   20 |      1 |
|  9 | usa     | grace  |   30 |      0 |
| 10 | japan   | monica |   40 |      2 |
+----+---------+--------+------+--------+

Case的場景示例

根據字段查詢分組結果

mysql> SELECT id, `name`,  CASE gender WHEN 1 THEN ''  WHEN 0 THEN ''  ELSE '其他' END AS gender FROM person;
+----+--------+--------+
| id | name   | gender |
+----+--------+--------+
|  3 | tim    ||
|  7 | kobe   ||
|  8 | james  ||
|  9 | grace  ||
| 10 | monica | 其他   |
+----+--------+--------+

分組統計

根據不同國家統計用戶的性別

mysql> select country, 
    -> sum(case when gender=1 then 1 else 0 end) as male, 
    -> sum( case when gender=0 then 1 else 0 end) as female, 
    -> sum(case when gender>1 then 1 else 0 end) as unknown 
    -> from person 
    -> group by country;
+---------+------+--------+---------+
| country | male | female | unknown |
+---------+------+--------+---------+
| china   |    1 |      0 |       0 |
| japan   |    0 |      0 |       1 |
| usa     |    2 |      1 |       0 |
+---------+------+--------+---------+

批量更新

簡單Case函數

UPDATE person 
SET `status` = CASE id
WHEN 1 THEN 1
WHEN 2 THEN 0
WHEN 3 THEN 0
WHEN 4 THEN 1
END
WHERE id IN (1, 2, 3, 4)

注意事項:一定要有WHERE id IN的限制,否則不在WHEN中的記錄就會被置為NULL

 Case搜索函數

UPDATE person 
SET `status` = CASE 
WHEN id%2=1 THEN 1
WHEN id%2=0 THEN 0
END

區別:簡單Case函數只能實現相等條件判斷,Case搜索函數適合復雜條件判斷,比如大於、小於等

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM