SQL,从另一个表中选择最大值

时间:2017-02-26 10:15:43

标签: sql greatest-n-per-group

这一次我花了最后几个小时。仍然没有找到答案,所以我想我也会问。 我有两张桌子:

Country - Code, Name, Populaion.
City - CountryCode, Name, Population. 

外键是CountryCode,它响应country.Code。

我试图找到每个国家人口最多的城市,其中输出是国家和城市的名称。我知道这可以用Max()来完成,但是我正在努力限制我的桌子显示所有国家的名字并显示人口最多的城市的名字。

SELECT country.name, city.name, MAX(city.Population) 
FROM city
LEFT JOIN country
ON city.CountryCode=Country.Code
GROUP BY city.name, country.name, city.population
ORDER BY city.population DESC;

这只给了我所有的国家和所有城市。任何人都可以帮我缩小范围,这样它只能显示每个国家的名字,但是有最大的城市吗?

1 个答案:

答案 0 :(得分:0)

您希望首先获得每个国家/地区的最大人口数,然后将其与城市表相关联,以了解其所属的城市。之后,将其与国家/地区表联系以获得所需的结果。

select co.name,
    ct.name,
    ct.population
from (
    select c1.*
    from city c1
    join (
        select countryCode,
            max(population) population
        from city
        group by countryCode
        ) c2 on c1.countryCode = c2.countryCode
        and c1.population = c2.population
    ) ct
join country co on ct.countryCode = co.code;

使用左连接在组中查找最大值的另一种方法:

select co.name,
    ct.name,
    ct.population
from (
    select c1.*
    from city c1
    left join city c2 on c1.countryCode = c2.countryCode
        and c1.population < c2.population
    where c2.countryCode is null
    ) ct
join country co on ct.countryCode = co.code;