MySQL如何对表中两列做除法计算人均GDP并降序排列输出
你写的SQL存在以下错误
- 计算逻辑倒置:人均GDP的计算公式应为「GDP总量 ÷ 人口」,你写的是
countries_population / countries_gdp,算出来的结果和实际需求完全相反 - 新列定义位置错误:计算生成的别名列需要写在
SELECT子句中,你错误放到了用于过滤数据的WHERE子句里,语法不成立 - 排序逻辑缺失:
ORDER BY DESC没有指定排序字段,MySQL无法识别要按哪个维度排序 - 潜在除0风险:没有过滤人口为0的异常数据,计算时可能触发除0报错
- 精度丢失风险:两个
BIGINT类型直接相除默认会取整,会导致人均GDP的小数部分丢失,结果精度不足
正确实现逻辑
如果仅需要临时查询输出结果,不需要持久化存储新列,直接在SELECT中定义计算列即可,完整语句如下:
SELECT countries_name, countries_population, countries_gdp, -- 计算人均GDP并保留2位小数,可按需调整精度 CAST(countries_gdp / countries_population AS DECIMAL(18,2)) AS countries_per_capita_gdp FROM countries.countries -- 过滤人口为0的异常数据,避免除0报错 WHERE countries_population > 0 -- 按人均GDP降序排列 ORDER BY countries_per_capita_gdp DESC;
如果需要把人均GDP永久存入表中,可先新增字段再更新数据:
-- 新增人均GDP字段 ALTER TABLE countries.countries ADD COLUMN countries_per_capita_gdp DECIMAL(18,2); -- 批量更新所有国家的人均GDP数值 UPDATE countries.countries SET countries_per_capita_gdp = CAST(countries_gdp / countries_population AS DECIMAL(18,2)) WHERE countries_population > 0; -- 按要求排序输出 SELECT * FROM countries.countries ORDER BY countries_per_capita_gdp DESC;
内容的提问来源于stack exchange,提问作者anonuser
相关产品推荐
相关产品推荐

