天天看點

[MySQL學習筆記]case when then else end用法

版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/SunnyYoona/article/details/51549260

Case具有兩種格式。簡單Case函數和Case搜尋函數。

(1)簡單Case函數

  1. CASE sex

  2.         WHEN '1' THEN '男'

  3.         WHEN '2' THEN '女'

  4. ELSE '其他' END

(2)Case搜尋函數

  1. CASE WHEN sex = '1' THEN '男'

  2.         WHEN sex = '2' THEN '女'

  3. ELSE '其他' END

這兩種方式,可以實作相同的功能。簡單Case函數的寫法相對比較簡潔,但是和Case搜尋函數相比,功能方面會有些限制,比如寫判斷式。還有一個需要注意的問題,Case函數隻傳回第一個符合條件的值,剩下的Case部分将會被自動忽略。

  1. --比如說,下面這段SQL,你永遠無法得到“第二類”這個結果

  2. CASE WHEN col_1 IN ( 'a', 'b') THEN '第一類'

  3.         WHEN col_1 IN ('a')       THEN '第二類'

  4. ELSE'其他' END

(3)如下場景,給出了一些國家以及對應的人口資料。我們根據這些國家的人口資料,統計亞洲和北美洲的人口數量。

國家 人口
中國 600
美國 100
加拿大
英國 200
法國 300
日本 250
德國
墨西哥 50
印度

建立國家表(country),包含兩個字段country和population:

  1. CREATE TABLE country (  country VARCHAR(40) NOT NULL DEFAULT '' COMMENT '國家',  population double NOT NULL DEFAULT 0.0 COMMENT '人口') ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='國家表';

插入資料:

  1. insert into country values('中國',600),('美國',100),('加拿大',100),('英國',200),('法國',300),('日本',250),('德國',200),('墨西哥',50),('印度',250)

統計亞洲和北美洲的人口數量:

  1. SELECT  SUM(population) as sum,

  2.        (CASE country

  3.                WHEN '中國'     THEN '亞洲'

  4.                WHEN '印度'     THEN '亞洲'

  5.                WHEN '日本'     THEN '亞洲'

  6.                WHEN '美國'     THEN '北美洲'

  7.                WHEN '加拿大'  THEN '北美洲'

  8.                WHEN '墨西哥'  THEN '北美洲'

  9.        ELSE '其他' END) continents

  10. FROM    country

  11. GROUP BY CASE country

  12.                WHEN '中國'     THEN '亞洲'

  13.                WHEN '印度'     THEN '亞洲'

  14.                WHEN '日本'     THEN '亞洲'

  15.                WHEN '美國'     THEN '北美洲'

  16.                WHEN '加拿大'  THEN '北美洲'

  17.                WHEN '墨西哥'  THEN '北美洲'

  18.        ELSE '其他' END;

統計結果:

sun continents
1100 亞洲
700 其他
北美洲

(4)如下場景,給出了一些國家以及對應性别的人口資料。我們根據這些國家的人口資料,分别統計男性和女性的人口數量。

性别
1 340
2 260
45
55
51
49
40
60

建立國家表(country2),包含三個字段country,sex和population:

  1. CREATE TABLE country2 (  country VARCHAR(40) NOT NULL DEFAULT '' COMMENT '國家',  sex tinyint NOT NULL DEFAULT 1 COMMENT '性别',  population double NOT NULL DEFAULT 0.0 COMMENT '人口') ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='國家表';

  1. insert into table country values('中國',1,340),('中國',2,260),('美國',1,45),('美國',2,55),('加拿大',1,51),('加拿大',2,49),('英國',1,40),('英國',2,60)

按照國家和性别進行分組,統計人口數量:

  1. SELECT country,

  2.       SUM( CASE WHEN sex = '1' THEN

  3.                      population ELSE 0 END) as boy,

  4.       SUM( CASE WHEN sex = '2' THEN

  5.                      population ELSE 0 END) as girl

  6. FROM  country2

  7. GROUP BY country;

boy girl



來源于:

點選打開連結