我有两个表 region(name, number), city(region_number, name, population),我想返回人口最多的前 5 个城市以及该地区的名称。这是我的查询,但它只返回一个区域(在本例中为北部)而不是所有区域的 5 个城市:
SELECT region.name AS region_name, city.name AS city_name, city.population AS population
FROM region INNER JOIN (SELECT city.name, city.population, city.region_code
FROM county LIMIT 5) AS city
ON region.code = city.region_code;
期望的输出:
region_name | city_name | population
------------+----------------------------+------------
NORTH | A | 226338
NORTH | B | 13656
NORTH | C | 9478
NORTH | D | 2464
NORTH | E | 2464
WEST | A | 226338
WEST | B | 13656
WEST | C | 9478
WEST | D | 2464
WEST | E | 2464
提前感谢您的帮助:)
最佳答案
作为一般规则,不要在没有order by
的情况下使用limit
。您将获得五个任意城市。
你正在尝试做的是在 MySQL 中有点痛苦。不过,以下应该有效:
SELECT r.name AS region_name, c.name AS city_name, c.population AS population
FROM region r INNER JOIN
county c
ON r.code = c.region_code
WHERE 5 >= (SELECT count(*)
FROM county c2
WHERE c2.region_code = c.region_code and c2.population >= c.population
)
ORDER BY region, population DESC;
where
子句计算人口等于或大于给定城市的城市数量。唯一返回的城市是前 5 名的城市。
关于mysql - 限制一列的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26723285/