case when then else end用法


 
 
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"

 


免責聲明!

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



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