mysql 中 case when 的使用

1. 准备表以及数据
CREATE TABLE country_population
(
    id INT NOT NULL AUTO_INCREMENT,
    country VARCHAR(255) NOT NULL,
    population BIGINT DEFAULT 0 ,
    PRIMARY KEY(id)
)ENGINE=INNODB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;

INSERT INTO country_population(`country`,`population`) VALUES('中国',600);
INSERT INTO country_population(`country`,`population`) VALUES('美国',100);
INSERT INTO country_population(`country`,`population`) VALUES('加拿大',100);
INSERT INTO country_population(`country`,`population`) VALUES('英国',200);
INSERT INTO country_population(`country`,`population`) VALUES('法国',300);
INSERT INTO country_population(`country`,`population`) VALUES('日本',250);
INSERT INTO country_population(`country`,`population`) VALUES('德国',200);
INSERT INTO country_population(`country`,`population`) VALUES('墨西哥',50);
INSERT INTO country_population(`country`,`population`) VALUES('印度',250);
2. case when 的两种形式
  • 简单 Case 函数
CASE  SEX
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END
  • Case 搜索函数
CASE WHEN SEX = '1' THEN '男'
            WHEN SEX = '2' THEN '女'
ELSE '其他' END

这两种方式有什么区别呢? Case 搜索函数的 When 可以有表达式。

3.问题
image.png

(1).统计亚洲和北美洲的人口数量。


SELECT CASE WHEN country = '中国' THEN '亚洲'
WHEN country = '印度' THEN '亚洲'
WHEN country = '日本' THEN '亚洲'
WHEN country = '美国' THEN '北美洲'
WHEN country = '加拿大' THEN '北美洲'
WHEN country = '墨西哥' THEN '北美洲'
ELSE '其他' END state,
SUM(population)
FROM country_population
GROUP BY 
CASE WHEN country = '中国' THEN '亚洲'
WHEN country = '印度' THEN '亚洲'
WHEN country = '日本' THEN '亚洲'
WHEN country = '美国' THEN '北美洲'
WHEN country = '加拿大' THEN '北美洲'
WHEN country = '墨西哥' THEN '北美洲'
ELSE '其他' END;
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容