SQL中case when的用法

SQL中case when的用法

Case具有两种格式。简单Case函数和Case搜索函数。

简单Case函数

1、语法

CASE input_expression_r
WHEN when_expression_r THEN result_expression_r
[ ...n ]
[
ELSE else_result_expression_r
]
END

2、实例
 

CASE sex WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END


Case搜索函数

1、语法

CASE
WHEN Boolean_expression_r THEN result_expression_r
[ ...n ]
[
ELSE else_result_expression_r
]
END

 

2、实例


CASE WHEN sex = '1' THEN '男'
WHEN sex = '2' THEN '女'
ELSE '其他' END

综合实例

有如下数据:(为了看得更清楚,我并没有使用国家代码,而是直接用国家名作为Primary Key)
 

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


根据这个国家人口数据,统计亚洲和北美洲的人口数量。应该得到下面这个结果。
 

人口
亚洲 1100
北美洲 250
其他 700

 

解决方法:

  •  
  • SQL 代码   复制
  • 
    --如果使用Case函数,SQL代码如下: 
    
    SELECT  SUM(population),
    
    CASE country
    WHEN '中国'     THEN '亚洲'
    WHEN '印度'     THEN '亚洲'
    WHEN '日本'     THEN '亚洲'
    WHEN '美国'     THEN '北美洲'
    WHEN '加拿大'  THEN '北美洲'
    WHEN '墨西哥'  THEN '北美洲'
    ELSE '其他' END
    FROM    Table_A
    GROUP BY CASE country
    WHEN '中国'     THEN '亚洲'
    WHEN '印度'     THEN '亚洲'
    WHEN '日本'     THEN '亚洲'
    WHEN '美国'     THEN '北美洲'
    WHEN '加拿大'  THEN '北美洲'
    WHEN '墨西哥'  THEN '北美洲'
    ELSE '其他' END;
    
    --同样的,我们也可以用这个方法来判断工资的等级,并统计每一等级的人数。SQL代码如下; 
    
    SELECT
    CASE WHEN salary <= 500 THEN '1'
    WHEN salary > 500 AND salary <= 600  THEN '2'
    WHEN salary > 600 AND salary <= 800  THEN '3'
    WHEN salary > 800 AND salary <= 1000 THEN '4'
    ELSE NULL END salary_class,
    COUNT(*)
    FROM    Table_A
    GROUP BY
    CASE WHEN salary <= 500 THEN '1'
    WHEN salary > 500 AND salary <= 600  THEN '2'
    WHEN salary > 600 AND salary <= 800  THEN '3'
    WHEN salary > 800 AND salary <= 1000 THEN '4'
    ELSE NULL END;
    
    		
  • 标签: