mysql - 限制一列的结果

标签 mysql sql

我有两个表 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/

相关文章:

php - 当使用 mysqli_fetch_assoc(result) 时,结果会怎样?

php - 数据库设计,网站的两类用户

MySQL:如何连接两个表的某些行不匹配

MySQL在批量插入后显示不正确的自动增量值

PHP foreach 在数组上循环返回多个相同数据

mysql - 如何使用考虑两列的 GROUP BY?

php - SQL查询错误找不到列

c# - 如何格式化存储过程以映射 EF 对象和自定义数据

sql - 有没有办法使用 Windows 身份验证为 ms sql 显式指定 u/p?

mysql - 如何删除 RDS 中的孤立表