你好,我开始使用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
从那里开始,我不知道如何添加计数函数而又不会作为错误返回。我不完全了解嵌套的基础。
感谢您的帮助。
答案 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