Вопрос

Я использую MySQL WORLD базы данных.

Для каждого континента я хочу вернуть название страны с наибольшим населением.

Мне удалось найти запрос, который работает. Попытка найти другой запрос, который использует только соединение, и избежать подзапроса.

Есть ли способ написать этот запрос, используя JOIN?

SELECT Continent, Name
FROM Country c1
WHERE Population >= ALL (SELECT Population FROM Country c2 WHERE c1.continent = c2.continent);

+---------------+----------------------------------------------+
| Continent     | Nanme                                         |
+---------------+----------------------------------------------+
| Oceania       | Australia                                    |
| South America | Brazil                                       |
| Asia          | China                                        |
| Africa        | Nigeria                                      |
| Europe        | Russian Federation                           |
| North America | United States                                |
| Antarctica    | Antarctica                                   |
| Antarctica    | Bouvet Island                                |
| Antarctica    | South Georgia and the South Sandwich Islands |
| Antarctica    | Heard Island and McDonald Islands            |
| Antarctica    | French Southern territories                  |
+---------------+----------------------------------------------+
11 rows in set (0.14 sec)
Это было полезно?

Решение

Это " наибольший n на группу " проблема, которая часто возникает в StackOverflow.

SELECT c1.Continent, c1.Name
FROM Country c1
LEFT OUTER JOIN Country c2
  ON (c1.continent = c2.continent AND c1.Population < c2.Population)
WHERE c2.continent IS NULL;

Объяснение: выполните объединение в поисках страны c2 с таким же континентом и большим населением. Если вы не можете найти его (что обозначено внешним объединением, возвращающим NULL для всех столбцов c2 ), то c1 должна быть страной с наибольшим населением на этом континенте. .

Обратите внимание, что здесь можно найти более одной страны на каждом континенте, если есть привязка к позиции № 1. Другими словами, может быть две страны, для которых не существует третьей страны с большим населением.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top