Как выбрать самый большой почтовый индекс для каждой страны

В каждой стране какой город имеет самый высокий почтовый индекс? Выберите только название страны и название города

Вот графическая схема, которая может вам помочь:

Вот что я сделал до сих пор:

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 Server или MS Access? Удалите один из тегов. Также покажите (в текстовом формате, а не в изображениях) некоторые примеры данных и ожидаемые результаты.

Dale K 20.12.2020 23:54

SQL-сервер (транзакт-SQL)

StereoMC 20.12.2020 23:55

Я бы попробовал удалить ci.zipcode из предложения GROUP BY, потому что вы пытаетесь найти макс. Если вы включите его в GROUP BY, вы получите все почтовые индексы.

Matthew MacFarland 21.12.2020 00:11
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
3
166
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

В одном варианте используется боковое соединение:

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

Другие вопросы по теме