Итак, задача 8 гласит: В некоторых странах население более чем в три раза больше, чем в любой из их соседей (на том же континенте). Дайте страны и континенты.
Я нахожу это немного неясным. Какие соседи? Это все страны континента? Если да, то следующий вопрос заключается в том, сравниваем ли мы с наименьшим соседом или с наибольшим соседом. Допустим, это самый большой сосед. Тогда запрос будет примерно таким
select name, continent
from world w1
where w1.population > (select max(3*w2.population)
from world w2
where w2.continent = w1.continent
and w2.name <> w1.name)
В противном случае, если бы это было 3 раза всех соседей вместе, это было бы это
select name, continent
from world w1
where w1.population > (select 3*sum(w2.population)
from world w2
where w2.continent = w1.continent
and w2.name <> w1.name)
Надеюсь, поможет.
Изменить: в руководстве по Oracle SQL (E26088-01) говорится о ВСЕХ функциях:
Сравнивает значение с каждым значением в списке или возвращенным запросом.
Пример:
SELECT * FROM employees
WHERE salary >=
ALL ( 1400, 3000)
ORDER BY employee_id;
Сначала агрегируя, а затем сравнивая, мы сводим его к одному сравнению. Результат в приведенной таблице примера тот же. Но запрос по ВСЕМ странам может на самом деле дать другой результат. Так что в конце концов я должен сказать, что ваш запрос лучше. Если на континенте есть страна с населением 1 миллион, 3,5 миллиона и 11 миллионов, то на самом деле 2-я страна в 3 раза больше первой, а 3-я страна в 3 раза больше 2-й. Мой запрос будет сравнивать только 2-ю страну с 3-й, но ваш запрос также сравнивает первую со второй.
person
hol
schedule
21.02.2013