mysql - 如何在 mysql 的计算列中使用 MAX/MIN 函数?
问题描述
我输入了一个代码来计算不同国家/地区的人均可用面积(表面积/人口)。我想知道该列中的最小值和最大值以及相应的国家名称,但是,在这两种情况下,它似乎都返回了错误的国家名称,即 Aruba,但报告的人均区域是正确的。
我试图在计算列上应用 max/min 函数。
我输入的代码:
select Name ,
SurfaceArea,
Population,
Max(SurfaceArea/Population) AS per_person_area
from country;
预期的结果应该是:
最低 - 澳门(每人面积 0.000038)
最高 - 格陵兰(每人面积 38.6801)
我得到的结果是:
最小值 - 阿鲁巴(每人面积 - 0.00038)
最大值 - 阿鲁巴(每人面积 - 38.6801)
请强调我在哪里犯了错误?
解决方案
您的 GROUP BY 不正确。您可以这样编写查询:
SELECT Name
, SurfaceArea
, Population
, SurfaceArea / Population AS PerPersonArea
FROM country
WHERE SurfaceArea / Population IN (
SELECT MIN(SurfaceArea / Population) FROM country UNION ALL
SELECT MAX(SurfaceArea / Population) FROM country
)
ORDER BY PerPersonArea
编写相同查询的另一种方法:
SELECT country.Name
, country.SurfaceArea
, country.Population
, country.SurfaceArea / country.Population AS PerPersonArea
, CASE WHEN country.SurfaceArea / country.Population = minratio THEN 'Minimum'
WHEN country.SurfaceArea / country.Population = maxratio THEN 'Maximum' END AS MatchType
FROM country
JOIN (
SELECT MIN(SurfaceArea / Population) AS minratio
, MAX(SurfaceArea / Population) AS maxratio
FROM country
) AS x ON country.SurfaceArea / country.Population IN (minratio, maxratio)
推荐阅读
- javascript - 如何在vscode中格式化文件而不格式化对象
- c# - 我怎样才能快速排序大对象数组,最好的方法?(100Mb 大小)
- c# - 如何使用带有集合视图的简单列表
- javascript - 如何使用css和离子将文本放在左下角
- linux - 如何从另一个文件 2 保持空行中删除文件 1 上出现的行?
- python-3.x - 在同一条路线上使用多个请求加速女服务员服务器上的烧瓶应用程序
- python - 使用 project.yml 文件训练 spaCy 3.0 模型时出错
- ios - for-await-in 循环在 Swift 5.5 中不起作用
- java - 如何实现一个java桌面应用的自动打包系统
- c# - 对象的成员列表未在 .NET Core API 控制器中复制