如何使用SQL从现有数值表创建含分组分类的新表?
按进度天数分组创建新表的SQL实现
假设你的现有表名为task_progress(可替换为实际表名),以下是实现需求的具体SQL语句:
1. 先查询验证分组结果
如果只是想查看分组后的结果(不创建新表),可以用以下语句添加分组列:
SELECT `task A`, `Days in progress`, CASE WHEN `Days in progress` > 20 THEN 'High' WHEN `Days in progress` < 20 THEN 'Low' ELSE 'Medium' -- 处理等于20的情况,可根据需求调整(比如归入Low/High) END AS `Progress Group` FROM task_progress;
2. 创建包含分组的新表
MySQL/MariaDB 语法
CREATE TABLE task_progress_groups AS SELECT `task A`, `Days in progress`, CASE WHEN `Days in progress` > 20 THEN 'High' WHEN `Days in progress` < 20 THEN 'Low' ELSE 'Medium' END AS `Progress Group` FROM task_progress;
SQL Server 语法
SELECT [task A], [Days in progress], CASE WHEN [Days in progress] > 20 THEN 'High' WHEN [Days in progress] < 20 THEN 'Low' ELSE 'Medium' END AS [Progress Group] INTO task_progress_groups FROM task_progress;
你之前尝试的问题说明
- 用单引号
'days in progress'包裹列名是错误的,单引号用于字符串常量,列名需根据数据库用反引号(MySQL)、方括号(SQL Server)或双引号(Oracle)包裹。 - 你的示例用了
COUNT统计数量,但需求是给每行添加分组标签,因此不需要COUNT,直接用CASE WHEN生成新列即可。
参考了《在CASE语句中使用SQL COUNT》的相关内容
内容的提问来源于stack exchange,提问作者Ndaudio
相关产品推荐
相关产品推荐

