任务:从 MySQL 标准数据库“world”中选择所有人口超过百万的城市,限制国家数量为 10 个。
如果我这样做:
SELECT country.Name, city.Name, city.Population
FROM country
INNER JOIN city
ON country.Code = city.CountryCode
WHERE city.Population >= 1000000
LIMIT 10;
它产生这个:
+-------------+--------------+------------+
| Name | Name | Population |
+-------------+--------------+------------+
| Afghanistan | Kabul | 1780000 |
| Algeria | Alger | 2168000 |
| Angola | Luanda | 2022000 |
| Argentina | Buenos Aires | 2982146 |
| Argentina | La Matanza | 1266461 |
| Argentina | Córdoba | 1157507 |
| Armenia | Yerevan | 1248700 |
| Australia | Sydney | 3276207 |
| Australia | Melbourne | 2865329 |
| Australia | Brisbane | 1291117 |
+-------------+--------------+------------+
例如,阿根廷重复 3 次。我需要将国家数量限制为 10 个,而不是行数。 GROUP BY 不行,因为我需要所有城市,我不需要将它们分组。
预期的结果是这样的:
+--------------------+----------------------------+------------+
| Name | Name | Population |
+--------------------+----------------------------+------------+
| Afghanistan | Kabul | 1780000 |
| Algeria | Alger | 2168000 |
| Angola | Luanda | 2022000 |
| Argentina | Buenos Aires | 2982146 |
| Argentina | La Matanza | 1266461 |
| Argentina | Córdoba | 1157507 |
| Armenia | Yerevan | 1248700 |
| Australia | Sydney | 3276207 |
| Australia | Melbourne | 2865329 |
| Australia | Brisbane | 1291117 |
| Australia | Perth | 1096829 |
| Azerbaijan | Baku | 1787800 |
| Bangladesh | Dhaka | 3612850 |
| Bangladesh | Chittagong | 1392860 |
| Brazil | São Paulo | 9968485 |
| Brazil | Rio de Janeiro | 5598953 |
| Brazil | Salvador | 2302832 |
| Brazil | Belo Horizonte | 2139125 |
| Brazil | Fortaleza | 2097757 |
| Brazil | BrasÃlia | 1969868 |
| Brazil | Curitiba | 1584232 |
| Brazil | Recife | 1378087 |
| Brazil | Porto Alegre | 1314032 |
| Brazil | Manaus | 1255049 |
| Brazil | Belém | 1186926 |
| Brazil | Guarulhos | 1095874 |
| Brazil | Goiânia | 1056330 |
| United Kingdom | London | 7285000 |
| United Kingdom | Birmingham | 1013000 |
+--------------------+----------------------------+------------+
如您所见,无论有多少个城市,国家/地区的数量都是 10。
当然,我的数据库是不同的。为了简单、通用和可用性,我使用了“世界”。
在真实数据库中,我还对“国家/地区”进行了一些过滤。
最佳答案
我希望这会奏效
SELECT country.Name, city.Name, city.Population
FROM country
LEFT JOIN city
ON country.Code = city.CountryCode
WHERE city.Population >= 1000000
AND city.id IN (SELECT id FROM city WHERE city.Population >= 1000000 AND country.Code = city.CountryCode LIMIT 10);
关于MySQL 选择。一列中的 LIMIT 个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22526061/