Неправильный ответ на запрос ниже - PullRequest
1 голос
/ 14 марта 2019

Учитывая таблицы CITY и COUNTRY, запросите названия всех континентов (COUNTRY.Continent) и их соответствующие средние населенные пункты города (CITY.Population), округленные до ближайшего целого числа.

Примечание: CITY.CountryCode и COUNTRY.Code совпадают ключевые столбцы.

СХЕМА СТРАНЫ

COUNTRY SCHEMA

СХЕМА ГОРОДА

CITY SCHEMA

Принято одно

select COUNTRY.CONTINENT, FLOOR(AVG(CITY.POPULATION)) 
FROM COUNTRY , CITY WHERE COUNTRY.CODE = CITY.COUNTRYCODE GROUP BY COUNTRY.CONTINENT;

Поскольку мы знаем, что в таблице стран население каждой страны дано, и мы можем использовать саму таблицу стран здесь, так почему я получаю неправильный ответ для этого?

SELECT C1.CONTINENT , FLOOR(AVG(C1.POPULATION))
FROM COUNTRY C1,COUNTRY C2    WHERE C1.CODE=C2.CODE GROUP BY C1.CONTINENT;

1 Ответ

2 голосов
/ 14 марта 2019

В первом запросе вы вычисляете среднюю численность населения города для каждого континента.

Второй запрос отличается, в том смысле, что он вычисляет среднюю страну население для каждого континента (примечание: нет необходимости ПРИСОЕДИНЯТЬСЯ, чтобы получить этот результат, достаточно простого агрегированного запроса по СТРАНЕ) ).

Замечания относительно вашего (первого) запроса: всегда используйте явный синтаксис JOINs вместо неявных JOIN-файлов старой школы. Использование псевдонимов таблиц также является хорошей привычкой: они делают запрос более читабельным

Рассмотрим:

SELECT 
    co.CONTINENT,
    FLOOR(AVG(ci.POPULATION)) 
FROM COUNTRY co
INNER JOIN CITY ci ON co.CODE = ci.COUNTRYCODE 
GROUP BY co.CONTINENT
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...