需求
建表语句
/* 将已有编号方式转换为新的方式并统计 */
CREATE TABLE PopTbl
(pref_name VARCHAR(32) PRIMARY KEY,
population INTEGER NOT NULL);
INSERT INTO PopTbl VALUES('德岛', 100);
INSERT INTO PopTbl VALUES('香川', 200);
INSERT INTO PopTbl VALUES('爱媛', 150);
INSERT INTO PopTbl VALUES('高知', 200);
INSERT INTO PopTbl VALUES('福冈', 300);
INSERT INTO PopTbl VALUES('佐贺', 100);
INSERT INTO PopTbl VALUES('长崎', 200);
INSERT INTO PopTbl VALUES('东京', 400);
INSERT INTO PopTbl VALUES('群马', 50);
比较本分的写法
SELECT
case pref_name
WHEN '德岛' THEN '四国'
WHEN '香川' THEN '四国'
WHEN '爱媛' THEN '四国'
WHEN '高知' THEN '四国'
WHEN '佐贺' THEN '九州'
WHEN '福冈' THEN '九州'
WHEN '长崎' THEN '九州'
ELSE '其它' END,
SUM(population)
FROM
poptbl
GROUP BY
case pref_name
WHEN '德岛' THEN '四国'
WHEN '香川' THEN '四国'
WHEN '爱媛' THEN '四国'
WHEN '高知' THEN '四国'
WHEN '佐贺' THEN '九州'
WHEN '福冈' THEN '九州'
WHEN '长崎' THEN '九州'
ELSE '其它' END
这种写法分组函数后也要像前面一样把case语句再一模一样拷一遍,以下是更好的写法,在MySql测试没问题,不保证别的数据库也可以
SELECT
case pref_name
WHEN '德岛' THEN '四国'
WHEN '香川' THEN '四国'
WHEN '爱媛' THEN '四国'
WHEN '高知' THEN '四国'
WHEN '佐贺' THEN '九州'
WHEN '福冈' THEN '九州'
WHEN '长崎' THEN '九州'
ELSE '其它' END as district,
SUM(population) as income
FROM
poptbl
GROUP BY district