You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server按AgeGroup分组统计人数及占比百分比结果异常求解

你之前计算结果全为0的核心原因是SQL默认对整数类型执行整数除法,当分子小于分母时,结果会被直接截断为整数0。

方案1:使用已知总人数硬编码

如果你要直接使用你已经统计好的总人数2754691,可以用以下修正后的语句,通过引入浮点型数字100.0触发浮点运算,避免整数截断,输出格式完全符合你的需求:

SELECT 
    AgeGroup,
    COUNT(*) AS PeopleInAgeGroup,
    CONCAT(ROUND(COUNT(*) * 100.0 / 2754691, 1), ' %') AS Percent
FROM FullData
GROUP BY AgeGroup
ORDER BY AgeGroup

方案2:自动计算总人数(更通用)

如果你不想硬编码总人数,避免后续表数据变化需要手动修改数值,可以用窗口函数自动统计全表总行数:

SELECT 
    AgeGroup,
    COUNT(*) AS PeopleInAgeGroup,
    CONCAT(ROUND(COUNT(*) * 100.0 / SUM(COUNT(*)) OVER (), 1), ' %') AS Percent
FROM FullData
GROUP BY AgeGroup
ORDER BY AgeGroup

其中SUM(COUNT(*)) OVER ()会在分组完成后自动统计所有分组的人数总和,也就是全表的总行数,不需要提前计算填写。

你之前的其他尝试中,用AVG的语句只单独计算了5-Seniors分组的占比,无法输出所有分组的正确结果;最后一种写法因为做了表的笛卡尔积且加了错误的过滤条件,才会出现重复异常结果,不需要再使用。

内容的提问来源于stack exchange,提问作者LNV

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 06:48:04