2014-10-12 4 views
0

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

Списка страны в порядке убывания, начиная со страной с наибольшим количеством городов в базе данных и заканчивая страны с наименьшее количество городов в базе данных. Города , которые имеют такое же количество городов должны быть отсортированы в алфавитном порядке от А до Z.

Я собираюсь прямо сейчас разместить код, который я пытался для этого запроса вместе с таблицами, которые я использую, чтобы завершить Это.

SELECT country.name 
FROM what.country as name 
INNER JOIN what.city as city ON name.country_code = city.country_code 
SORT BY name DESC 

Вот две таблицы, которые я использую.

   Table "what.country" 
    Column  |   Type   |    Modifiers    
-----------------+-----------------------+-------------------------------------- 
country_code | character(3)   | not null default ''::bpchar 
name   | character varying(52) | not null default ''::character varying 
continent  | continent    | not null 
region   | character varying(26) | not null default ''::character varying 
surface_area | real     | not null default 0::real 
indep_year  | smallint    | 
population  | integer    | not null default 0 
life_expectancy | real     | 
gnp    | real     | 

      Table "what.city" 
    Column |   Type   |      Modifiers     
--------------+-----------------------+----------------------------------------- 
id   | integer    | not null default nextval('city_id_seq'::regclass) 
name   | character varying(35) | not null default ''::character varying 
country_code | character(3)   | not null default ''::bpchar 
district  | character varying(20) | not null default ''::character varying 
population | integer    | not null default 0 

ответ

0

Список стран, в порядке убывания, начиная со страной с наибольшее количество городов в базе данных и заканчивая страна с наименьшим количеством городов в базе данных. Города , которые имеют такое же количество городов должны быть отсортированы в алфавитном порядке от А до Z.

  • Для нахождения country with largest number of cities или smallest number of cities мы должны использовать GROUP BY и COUNT где группировка по стране и подсчета городов
  • для descending order использовать city_count DESC и same number of cities should be sorted alphabetically использовать country_name

Код

SELECT country.name AS country_name, COUNT(city.id) AS city_count 
FROM what.country as name 
INNER JOIN what.city as city ON name.country_code = city.country_code 
GROUP BY country.name 
ORDER BY city_count DESC, country_name 
+0

Я ценю объяснение, которое мне действительно помогло! – ryan

+0

Добро пожаловать. Рад помочь. – Ram

+0

Предоставленный запрос не будет работать в PostgreSQL, так как нет предложения 'SORT BY'. – vyegorov

1

Вы можете попробовать сделать запрос как:

SELECT A.name AS name, IFNULL(B.cities, 0) AS cities 
FROM what.country AS A 
LEFT JOIN (SELECT country_code, count(id) AS cities FROM what.city GROUP BY country_code) AS B 
ON A.country_code = B.country_code 
ORDER BY cities DESC, name ASC 
+0

Хорошо, я попробую, спасибо – ryan

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