В каждой стране какой город имеет самый высокий почтовый индекс? Выберите только название страны и название города
Вот графическая схема, которая может вам помочь:
Вот что я сделал до сих пор:
SELECT CountryName, CityName
from City ci
join County co on co.CountryID = ci.CountryID
group by CountryName, CityName, ci.ZipCode
having ZipCode = MAX(ZipCode)
Я был бы признателен, если кто-то может решить мне это.
SQL-сервер (транзакт-SQL)
Я бы попробовал удалить ci.zipcode из предложения GROUP BY, потому что вы пытаетесь найти макс. Если вы включите его в GROUP BY, вы получите все почтовые индексы.
В одном варианте используется боковое соединение:
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
)
Вы также можете попробовать это. Используйте функцию ранга и отфильтруйте ее во внешнем запросе
select * from
(select c1.countryname as countryname, c2.cityname as cityname,
max_city_zip = rank() Over (partition by c1.countryname order by c2.cityname desc)
from country c1
inner join city c2
on c1.countryID = c2.countryID
group by c1.countryname, c2.cityname)Y where max_city_zip = 1
Вы используете SQL Server или MS Access? Удалите один из тегов. Также покажите (в текстовом формате, а не в изображениях) некоторые примеры данных и ожидаемые результаты.