SQL Server相关子查询实现区域单位总和及占比统计
按区域统计Units总和及占比的SQL解决方案
需求
按区域统计unit字段的总和,同时计算该总和占全局总unit数的百分比。
原代码问题分析
你提供的CTE已经正确按区域分组计算了各区域的unit总和,但后续关联原表salesorders后,sum(s.unit)计算的是当前区域的unit总和而非全局总数,且未分组导致报错。
修正后的SQL(SQL Server)
WITH RegionUnits AS ( SELECT region, SUM(unit) AS Sum_unit FROM salesorders GROUP BY region ), TotalUnits AS ( SELECT SUM(unit) AS Total FROM salesorders ) SELECT ru.region, ru.Sum_unit, ROUND((ru.Sum_unit * 100.0) / tu.Total, 3) AS Percentage FROM RegionUnits ru CROSS JOIN TotalUnits tu;
代码说明
RegionUnitsCTE:按区域分组,计算每个区域的unit总和。TotalUnitsCTE:计算全局所有unit的总数。- 使用
CROSS JOIN关联两个CTE,确保每个区域都能获取到全局总数,再计算占比(乘以100.0是为了避免整数除法,ROUND保留3位小数匹配预期结果)。
预期结果
| Region | Sum_unit | Percentage |
|---|---|---|
| East | 25 | 29.411 |
| West | 60 | 71.588 |
内容的提问来源于stack exchange,提问作者Sriram
相关产品推荐
相关产品推荐

