2014-10-12 4 views
-1

Этот вопрос относится к базе данных 'world'.Sql: Показать крупные города в каждой стране

Есть две таблицы: «Город» и «Страна». Город содержит поля населения и код страны - Ex: «IND» для Индии - для каждой строки (название города). Страна содержит поля кода страны и континента для каждой строки (название страны).

Мне нужно получить список, который показывает самый большой город в каждой стране, самый крупный из которых является самым большим населением. Как это сделать в MySQL?

+1

Это основной материал. Что вы пробовали? – Strawberry

ответ

2

С MySQL (только) есть трюк, вы можете использовать:

select * from (
    select * from 
    from country c 
    join city d on d.country_id = c.id 
    order by population desc 
) x 
group by 1 -- assumes id column of country table is column number 1 

Вместо того, возвращающего совокупного для каждой группы, это нестандартная группировка (не все необобщенные столбцов сгруппированы по) возвращает первую строку для каждой группы, поэтому, заказывая сначала, вы получаете самый большой населенный город для каждой страны.

Хотя «официально» не гарантируется работа, на практике он работает в 100% случаев.

+0

Я просто хотел бы добавить, что ваша группа недоступна для c.id .. Возможно, вам захочется выбрать ее с псевдонимом для группы :) –

+0

@JohnRuddell, как это изменится для нахального? – Bohemian

+0

Еще до того, как группа была группой c.id, теперь ее группа на 1, так что это исправлено :). Еще одна проблема, которую вы могли бы иметь, - это если в подзапросе есть одинаковые столбцы, такие как идентификатор для каждой таблицы, а затем выберите * ошибка :) +1 от меня, хотя –

1

Вы могли бы попробовать этот запрос:

SELECT country, city 
FROM city AS c 
WHERE population = (SELECT MAX(population) FROM city WHERE country=c.country); 

Обратите внимание, что в принципе может быть более чем один крупный город в стране, то есть два или более городов, которые происходят, чтобы иметь ту же популяцию.

Смежные вопросы