SQL:哪个国家的城市最多?

时间:2019-02-27 13:55:19

标签: mysql sql nested

你好,我开始使用MySQL,尝试嵌套公式似乎有些麻烦。我正在研究一个问题,问题是,哪个国家的城市最多?

我有两个表:

CITY:
city
city_id
country_id

COUNTRY:
country 
country_id

我能够将两个表合并在一起,以使城市与国家/地区匹配,但是在那之后,我不知道如何计算拥有最多城市的国家/地区。

我当前的代码是:

SELECT city.city, country.country 
FROM city, country
WHERE city.country_id = country.country_id

从那里开始,我不知道如何添加计数函数而又不会作为错误返回。我不完全了解嵌套的基础。

感谢您的帮助。

9 个答案:

答案 0 :(得分:3)

您不必一定要嵌套。要简单地知道哪个国家的城市最多,只需使用group by:

select country_id, count(1)
from city
group by country_id

这将为您提供每个国家的城市数。然后,您可以使用CTE来获得城市数量最多的国家。

答案 1 :(得分:0)

如果要使用聚合函数,则需要GROUP BY

鉴于您对此非常陌生,我认为如果您花几分钟阅读一些文档,将会获得更多的收益。别担心,这是一件容易的事,因此您很快就会了解。请查看以下有关在MySQL中使用GROUP BY的基本信息(MySQL GROUP BY basic info)。有关“带有聚合函数的MySQL GROUP BY”主题,您的问题得到了解答。

基本分组依据:

SELECT 
    status, COUNT(*)
FROM
    orders
GROUP BY status;

使用联接进行分组:

SELECT 
    status, SUM(quantityOrdered * priceEach) AS amount
FROM
    orders
        INNER JOIN
    orderdetails USING (orderNumber)
GROUP BY status;

答案 2 :(得分:0)

SELECT x.country 
  FROM country x
  JOIN city y
    ON y.country_id = x.country_id
 GROUP
    BY x.country
 ORDER 
    BY COUNT(*) DESC LIMIT 1;

如果文明程度最高的国家拥有相等数量的城市(极不可能),您就必须对此稍作修改。

答案 3 :(得分:0)

造成这种困难的是可能的联系,即两个或更多国家共享最多的城市。从MySQL 8开始,您可以使用窗口函数来帮助您。在这里,我比较了国家/地区和国家/地区的最大值,然后选择了两个匹配的行。

select *
from country
where (country_id, true) in -- true means it is a maximum city country
(
  select country_id, count(*) = max(count(*)) over()
  from city
  group by country_id
);

答案 4 :(得分:0)

尝试以下代码:

**select
    country.country_id,
    count(city.city_id)
from
    country
inner join
    city
on
    city.country_id=country.country_id
group by
    city.country_id
having
    count(city.city_id) =
    (SELECT
        max(count(city.city_id))
    FROM
        city
    GROUP BY
        city.city_id);**

您需要按country_id分组,以确保可以计算与一个country_id连接的所有城市。

这是一个好方法,但是它不能与“ group by”一起使用,因为它将在“ group by”命令之前进行说明。

从不同表中联接数据的方法不是一种非常合适但可行的方法。我建议在这种情况下使用内部联接使命令更明显/更易读。

Count()用于计算在一个国家/地区累积的城市数 max()用于获取城市最多(count()最高)的国家。

答案 5 :(得分:0)

抱歉,这是我的第一篇文章,我的代码看上去很糟糕。

再次按照我的代码。

select
    country.country_id,
    count(city.city_id)
from
    country
inner join
    city
on
    city.country_id=country.country_id
group by
    city.country_id
having
    count(city.city_id) =
    (SELECT
        max(count(city.city_id))
    FROM
        city
    GROUP BY
        city.city_id);

最诚挚的问候,

詹斯

答案 6 :(得分:0)

SELECT country_id, count(1)
 FROM city
 GROUP BY country_id
 ORDER BY count(1) desc;

答案 7 :(得分:-1)

尝试遵循以下代码-

SELECT *, 
  (SELECT COUNT(*) FROM cities WHERE cities.country_id=C.country_id) as cities_count 
FROM country C 
ORDER BY cities_count DESC
LIMIT 0,1

还需要将两个表连接起来吗?在查询中,您说过需要查找哪个国家的城市最多?

以上查询将仅返回一个城市最多的国家/地区。

答案 8 :(得分:-1)

您可以找到这样的国家:

  

从(SELECT COUNT(id)AS id中选择MAX(c.id)             从按country_id的城市分组)c

相关问题