MySQL 选择。一列中的 LIMIT 个值

标签 mysql

任务:从 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/

相关文章:

mysql - 与 mysql 的内连接不起作用

mysql - 关于 mysql 或其他 DBMS 中的外键约束

php - MYSQL 选择最后 3 行,按 ASC 排序

mysql - 通过子帖子内容显示父帖子

php - 从动态生成的表中传递值

mysql - 为什么 CONCAT 第一次没有向 mySQL 表中插入文本?

mysql如何转储数据库的所有表结构并导入另一个数据库

即使没有记录插入数据库,PHP 也返回成功

Mysql - 如果表中有重复项,则根据date_created列选择最旧的

python - Django Restful 模型外键 - 指定 From 和 To 字段