使用GROUP BY子句与SUM聚合函数分组统计州级数据报错求助
按州统计总入住率的SQL错误修复
问题背景
你原本的SQL是查询单条记录的分组房产入住情况,现在需要按州汇总总已占用房产数、总房产数以及州级整体入住率,但执行分组查询时触发了Msg 8120错误,提示totaloccupancy列既不在聚合函数中,也未被包含在GROUP BY子句内,不符合SQL分组查询的语法规则。
错误原因
SQL的GROUP BY语法有明确要求:SELECT子句中的列,要么是GROUP BY指定的分组列,要么必须被聚合函数(如SUM、COUNT、AVG等)包裹。你之前的尝试直接引用了未做聚合处理的totaloccupancy和totalproperty字段,违反了这一规则,因此报错。
解决方案
要实现按州汇总,需用SUM()函数分别计算每个州的总已占用房产数、总房产数,再基于这两个总和计算州级整体入住率,最后按state_name分组。正确SQL如下:
SELECT state_name AS State_Names, SUM(totaloccupancy) AS Total_OccupiedProperties, SUM(totalproperty) AS Total_Properties, CAST(ROUND(SUM(totaloccupancy) * 100.0 / SUM(totalproperty), 1) AS REAL) AS Occupancy_Percentage FROM OCCUPANCYPERCENTAGE GROUP BY state_name
代码说明
SUM(totaloccupancy):累加同一州所有记录的已占用房产数,得到该州总已占用量SUM(totalproperty):累加同一州所有记录的总房产数,得到该州总房产量- 入住率计算基于两个总和,确保结果是州级别的整体占比,而非单条记录的占比
GROUP BY state_name:指定按州名分组,保证每个州仅返回一条汇总记录
执行后会得到类似如下的结果:
State_Names Total_OccupiedProperties Total_Properties Occupancy_Percentage Florida 56 71 78.9 Georgia 638 723 88.2
内容的提问来源于stack exchange,提问作者ABHISHEK THAKUR
相关产品推荐
相关产品推荐

