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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:54:07