Как запросить данные из двух баз данных и сгруппировать результаты по диапазону - PullRequest
0 голосов
/ 15 мая 2019

Упражнение:

У меня есть таблица, которая называется ПОГОДА, которая записывает температуру городов в следующем формате:

Table 1

У меня также есть дополнительная таблица, которая включает больше информации о каждый город; Схема таблицы CITY выглядит следующим образом:

table 2

Я пытаюсь написать запрос, который запрашивает таблицы WEATHER и CITY и выводит следующее:

Максимальная температура для каждой страны, сгруппированная по городскому населению, классифицируется как:

  • Малые города: численность населения менее 1 млн.
  • Средние города: население от 1 до 5 миллионов
  • Крупные города: население более 5 миллионов

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

Вот где мне удалось добраться:

SELECT
    CITY.Country,
    WEATHER.AVG(Maximum_Temperature) as Max_Temp,
    case CITY.Population
        when < 1000000 then "Small"
        when > 5000000 then "Large"
        else "Medium"
FROM
    CITY
INNER JOIN
    WEATHER
ON
    WEATHER.City_Name = CITY.City_Name
GROUP BY 
    CITY.Country

Вывод должен выглядеть следующим образом:

output table

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

Попробуйте,

SELECT
    CITY.Country Country,
    CASE 
        WHEN CITY.Population < 1000001 'Small'
        WHEN CITY.Population < 5000001 'Medium'
        ELSE 'Large'
    END City_Size,
    WEATHER.AVG(Maximum_Temperature) as Max_Temp
FROM
    CITY
INNER JOIN
    WEATHER
ON
    CITY.City_Name = WEATHER.City_Name
GROUP BY 
    CITY.Country
0 голосов
/ 15 мая 2019

Вот правильный синтаксис того, что вы пытаетесь сделать:

SELECT C.Country, AVG(W.Maximum_Temperature) as Max_Temp,
        (case when c.Population < 1000000 then 'Small'
              when c.Population > 5000000 then 'Large'
              else 'Medium'
         end)
FROM CITY C INNER JOIN
     WEATHER W
     ON W.City_Name = C.City_Name
GROUP BY C.Country,
         (case when c.Population < 1000000 then 'Small'
              when c.Population > 5000000 then 'Large'
              else 'Medium'
          end);

Обратите внимание на изменения:

  • SQL использует одинарные кавычки для разделения строк, а не двойные кавычки (хотя некоторые базы данных поддерживают расширенную функциональность).
  • Синтаксис WEATHER.AVG() не дает ожидаемого результата.В большинстве баз данных она будет искать пользовательскую функцию с именем AVG() в схеме / базе данных WEATHER.
  • Вы хотите указать все ссылки на столбцы.
  • Чтобы помочьс этим я добавил псевдонимы таблиц в качестве сокращений для имен таблиц.
  • Выражение case должно быть в GROUP BY.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...