Как использовать функции MAX / MIN в вычисляемом столбце в MySQL? - PullRequest
0 голосов
/ 18 октября 2019

Я набрал код, который рассчитывал площадь, доступную на человека в разных странах (Площадь / Население). Я хотел узнать минимальные и максимальные значения из этого столбца вместе с соответствующими названиями стран, однако, похоже, что в обоих случаях возвращается неправильное название страны, то есть Аруба, но указанная область для каждого человека верна.

Я пытался применить функции max / min к вычисляемому столбцу.

Код, который я набрал:

select Name ,
       SurfaceArea,
       Population,
       Max(SurfaceArea/Population) AS per_person_area
from country;

Ожидаемый результат должен быть:

Минимум - Макао (на человека в 0,000038)
Максимум -Гренландия (на человека 38.6801)

Результат, который я получаю:

Минимум - Аруба (на человека - 0.00038)
Максимум - Аруба (На человека - 38,6801)

Пожалуйста, укажите, где я совершаю ошибку?

1 Ответ

1 голос
/ 18 октября 2019

Ваша 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)
...