基于两张表计算占比并创建结果表的SQL实现求助
计算区域占比并创建目标表
你可以用CREATE TABLE ... AS SELECT语句直接基于现有两张表生成目标表,以下是适配不同数据库的实现方案:
核心逻辑
- 关联
Region 1和Region 2表(Region 2仅一行总计数据,直接交叉关联即可) - 先将
Region 1的Total字段转换为数值类型(去除千分位逗号) - 按公式
(转换后的Total / Grand Total) * 100计算占比,按需保留小数位并格式化
MySQL/MariaDB 代码实现
-- 创建目标表(表名可自定义,示例为Region_Stats) CREATE TABLE Region_Stats AS SELECT r1.Territories, r1.Total, -- 计算占比并格式化:保留两位小数后拼接百分号 CONCAT(ROUND((REPLACE(r1.Total, ',', '') + 0) / r2.`Grand Total` * 100, 2), '%') AS `%` FROM `Region 1` r1, `Region 2` r2;
SQL Server 代码实现
CREATE TABLE Region_Stats SELECT r1.Territories, r1.Total, CONCAT(ROUND(CAST(REPLACE(r1.Total, ',', '') AS DECIMAL(18,2)) / r2.[Grand Total] * 100, 2), '%') AS [%] FROM [Region 1] r1 CROSS JOIN [Region 2] r2;
关键细节说明
- 字段转换:原表
Total带千分位逗号属于字符串类型,必须用REPLACE去除逗号后转为数值类型才能参与计算 - 表名处理:带空格的表名需用反引号(MySQL)或方括号(SQL Server)包裹
- 占比格式化:通过
ROUND控制小数位数,CONCAT拼接百分号匹配目标表格式
内容的提问来源于stack exchange,提问作者Christopher
相关产品推荐
相关产品推荐

