首页 > 解决方案 > 如何为每个国家/地区选择最大的邮政编码

问题描述

在每个国家/地区,哪个城市的邮政编码最高?仅选择国家名称和城市名称

这是一个图形模式,可能会对您有所帮助:

在此处输入图像描述

这是我到目前为止所做的:

SELECT CountryName, CityName
from City ci
join County co on co.CountryID = ci.CountryID
group by CountryName, CityName, ci.ZipCode
having ZipCode = MAX(ZipCode)

如果有人能解决我这个问题,我将不胜感激。

标签: sqlsql-serverdatabasegreatest-n-per-grouplateral-join

解决方案


一种选择使用横向连接:

select co.countryname, ci.cityname, ci.zipcode
from country co
cross apply (
    select top (1) with ties ci.* 
    from city ci 
    where ci.countryid = co.countryid
    order by ci.zipcode desc
) ci

您还可以使用row_number()

select co.countryname, ci.cityname, ci.zipcode
from country co
inner join (
    select ci.*, rank() over(partition by countryid order by zipcode desc) rn
    from city ci
) ci on ci.countryid = co.countryid

如果您正在运行 MS Access,则可以使用相关子查询:

select co.countryname, ci.cityname, ci.zipcode
from country co as co
inner join city as ci on ci.countryid = co.countryid
where ci.zipcode = (
    select max(c1.zipcode)
    from city as ci1
    where ci1.countryid = ci.country
)

推荐阅读