首页 > 解决方案 > 如何在 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)

请强调我在哪里犯了错误?

标签: mysqlmysql-workbench

解决方案


您的 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)

推荐阅读