case具有兩種格式,簡單case函數和case搜索函數
case函數只返回第一個符合條件的值,剩下的case部分將會被自動忽略
1、簡單函數
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END
2、搜索函數
CASE WHEN sex = '1' THEN '男'
WHEN sex = '2' THEN '女'
ELSE '其他' END
CASE WHEN col_1 IN ( 'a', 'b') THEN '第一類'
WHEN col_1 IN ('c') THEN '第二類'
ELSE'其他' END
實例一:比如下列場景,給出一些國家以及對應的人口數據,根據這些國家的人口數據,統計亞洲和北美洲的人口數量

--1、創建country表,包含兩個字段country和population
CREATE TABLE country1(country STRING,population int)
CLUSTERED by(country) INTO 7 BUCKETS
STORED AS ORC
tblproperties('transactional'='true');
--2、數據
BATCHINSERT INTO country1 batchvalues(
values("中國",600),
values("美國",100),
values("加拿大",100),
values("英國",200),
values("法國",300),
values("日本",250),
values("德國",200),
values("墨西哥",50),
values("印度",250)
);
CREATE TABLE country(country STRING,population int);
INSERT INTO TABLE country SELECT * FROM country1;
SELECT * FROM country;
--3、統計亞洲和北美洲人口數量
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;

實例二:給出一些國家以及對應性別的人口數據。根據這些國家的人口數據,分別統計男性和女性的人口數量
--1、創建國家表country2
CREATE TABLE country2(country STRING,sex INT DEFAULT 1,population int);
CREATE TABLE country3(country STRING,sex INT DEFAULT 1,population int)
CLUSTERED by(country) INTO 7 BUCKETS
STORED AS ORC
tblproperties('transactional'='true');
BATCHINSERT INTO country3 batchvalues(
values('中國',1,340),
values('中國',2,260),
values('美國',1,45),
values('美國',2,55),
values('加拿大',1,51),
values('加拿大',2,49),
values('英國',1,40),
values('英國',2,60)
);
INSERT INTO TABLE country2 SELECT * FROM country3;
--2、按照國家和性別進行分組,統計人口數量
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;

case when in.......
"select CASE " +
"WHEN areaName in('華北地區','東北地區') THEN 'A' " +
"WHEN areaName in('華東地區','華中地區') THEN 'B' " +
"WHEN areaName in('華南地區','西南地區') THEN 'C' " +
"else 'D' end areaLevelName,areaName,productName,clickNum,if(extendInfo=1,'自營','第三方') " +
"extendInfo from spark_base_data"