GROUP BY查询中执行字段除法运算报not a GROUP BY expression错误
报错原因
- GROUP BY 子句使用了
UPPER(healthDistrict)作为分组依据,但 SELECT 子句直接引用了未做大写转换的healthDistrict,二者不属于同一分组维度,数据库无法识别匹配。 - SELECT 列表中的
numHospitalizations、numCases、numDeaths字段既没有加入GROUP BY子句,也没有使用聚合函数包裹,不符合分组查询的语法要求:所有不在GROUP BY中的非聚合字段,都无法直接在SELECT中返回。
正确写法
如果你需要计算每个行政区的总体住院/死亡百分比,应该先对分组内的指标做聚合汇总,再做除法计算,示例代码如下:
SELECT UPPER(healthDistrict) AS HEALTH_DISTRICT, SUM(numHospitalizations) * 100.0 / NULLIF(SUM(numCases), 0) AS PERCENTHOSP, SUM(numDeaths) * 100.0 / NULLIF(SUM(numCases), 0) AS PERCENTDEATH FROM CovidReport GROUP BY UPPER(healthDistrict);
说明
- 用
SUM()聚合函数汇总每个行政区的总住院数、总病例数、总死亡数,符合分组查询语法要求 - 加入
NULLIF避免部分区域无病例时出现除以0的报错 - 乘以
100.0是为了将结果转换为百分比格式,如果不需要百分比可以去掉
内容的提问来源于stack exchange,提问作者user6578
相关产品推荐
相关产品推荐

