版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/SunnyYoona/article/details/51549260
Case具有兩種格式。簡單Case函數和Case搜尋函數。
(1)簡單Case函數
-
CASE sex
-
WHEN '1' THEN '男'
-
WHEN '2' THEN '女'
-
ELSE '其他' END
(2)Case搜尋函數
-
CASE WHEN sex = '1' THEN '男'
-
WHEN sex = '2' THEN '女'
-
ELSE '其他' END
這兩種方式,可以實作相同的功能。簡單Case函數的寫法相對比較簡潔,但是和Case搜尋函數相比,功能方面會有些限制,比如寫判斷式。還有一個需要注意的問題,Case函數隻傳回第一個符合條件的值,剩下的Case部分将會被自動忽略。
-
--比如說,下面這段SQL,你永遠無法得到“第二類”這個結果
-
CASE WHEN col_1 IN ( 'a', 'b') THEN '第一類'
-
WHEN col_1 IN ('a') THEN '第二類'
-
ELSE'其他' END
(3)如下場景,給出了一些國家以及對應的人口資料。我們根據這些國家的人口資料,統計亞洲和北美洲的人口數量。
國家 | 人口 |
中國 | 600 |
美國 | 100 |
加拿大 | |
英國 | 200 |
法國 | 300 |
日本 | 250 |
德國 | |
墨西哥 | 50 |
印度 |
建立國家表(country),包含兩個字段country和population:
-
CREATE TABLE country ( country VARCHAR(40) NOT NULL DEFAULT '' COMMENT '國家', population double NOT NULL DEFAULT 0.0 COMMENT '人口') ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='國家表';
插入資料:
-
insert into country values('中國',600),('美國',100),('加拿大',100),('英國',200),('法國',300),('日本',250),('德國',200),('墨西哥',50),('印度',250)
統計亞洲和北美洲的人口數量:
-
SELECT SUM(population) as sum,
-
(CASE country
-
WHEN '中國' THEN '亞洲'
-
WHEN '印度' THEN '亞洲'
-
WHEN '日本' THEN '亞洲'
-
WHEN '美國' THEN '北美洲'
-
WHEN '加拿大' THEN '北美洲'
-
WHEN '墨西哥' THEN '北美洲'
-
ELSE '其他' END) continents
-
FROM country
-
GROUP BY CASE country
-
WHEN '中國' THEN '亞洲'
-
WHEN '印度' THEN '亞洲'
-
WHEN '日本' THEN '亞洲'
-
WHEN '美國' THEN '北美洲'
-
WHEN '加拿大' THEN '北美洲'
-
WHEN '墨西哥' THEN '北美洲'
-
ELSE '其他' END;
統計結果:
sun | continents |
1100 | 亞洲 |
700 | 其他 |
北美洲 |
(4)如下場景,給出了一些國家以及對應性别的人口資料。我們根據這些國家的人口資料,分别統計男性和女性的人口數量。
性别 | ||
1 | 340 | |
2 | 260 | |
45 | ||
55 | ||
51 | ||
49 | ||
40 | ||
60 |
建立國家表(country2),包含三個字段country,sex和population:
-
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='國家表';
-
insert into table country values('中國',1,340),('中國',2,260),('美國',1,45),('美國',2,55),('加拿大',1,51),('加拿大',2,49),('英國',1,40),('英國',2,60)
按照國家和性别進行分組,統計人口數量:
-
SELECT country,
-
SUM( CASE WHEN sex = '1' THEN
-
population ELSE 0 END) as boy,
-
SUM( CASE WHEN sex = '2' THEN
-
population ELSE 0 END) as girl
-
FROM country2
-
GROUP BY country;
boy | girl | |
來源于:
點選打開連結