Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Упражнение на вложенный SELECT  [new]
skleppi
Member

Откуда:
Сообщений: 170
Всем привет!

Помогите, пожалуйста, с запросом с sqlzoo.net (не нашла у них раздела с ответами).

Есть таблица:

name	continent	area	population	gdp
Afghanistan	Asia	652230	25500100	20343000000
Albania	Europe	28748	2831741	12960000000
Algeria	Africa	2381741	37100000	188681000000
Andorra	Europe	468	78115	3712000000
Angola	Africa	1246700	20609294	100990000000


И запрос -Which countries have a GDP greater than any country in Europe? [Give the name only.]

Пробую такой запрос:

select name from world
where gdp > ALL
(select gdp from world
where continent ='Europe')



но возвращает пусто :(
1 июл 13, 18:57    [14506940]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение на вложенный SELECT  [new]
qwerty112
Guest
skleppi
но возвращает пусто :(

походу, поле gdp - текстовое
1 июл 13, 21:01    [14507273]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение на вложенный SELECT  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
skleppi
Всем привет!

Помогите, пожалуйста, с запросом с sqlzoo.net (не нашла у них раздела с ответами).

Есть таблица:

name	continent	area	population	gdp
Afghanistan	Asia	652230	25500100	20343000000
Albania	Europe	28748	2831741	12960000000
Algeria	Africa	2381741	37100000	188681000000
Andorra	Europe	468	78115	3712000000
Angola	Africa	1246700	20609294	100990000000


И запрос -Which countries have a GDP greater than any country in Europe? [Give the name only.]

Пробую такой запрос:

select name from world
where gdp > ALL
(select gdp from world
where continent ='Europe')



но возвращает пусто :(

Конечно, т.к. вы хотите получить несуществующее значение.
Вы выбираете имя страны, где gdp больше ВСЕХ(>ALL) существующих gdp по Европе.

select name from world
where gdp =(select MAX(gdp) from world
where continent ='Europe')
2 июл 13, 08:42    [14508026]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение на вложенный SELECT  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2995
Сергей Викт.

Конечно, т.к. вы хотите получить несуществующее значение.
Вы выбираете имя страны, где gdp больше ВСЕХ(>ALL) существующих gdp по Европе.

select name from world
where gdp =(select MAX(gdp) from world
where continent ='Europe')


и Вы уверены, что таких значений нет и Ваш запрос возвращает то, что нужно?

+1 qwerty112 , скорее проблема в типе поля, сам запрос корректный
2 июл 13, 09:16    [14508128]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение на вложенный SELECT  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
HandKot
Сергей Викт.
Конечно, т.к. вы хотите получить несуществующее значение.
Вы выбираете имя страны, где gdp больше ВСЕХ(>ALL) существующих gdp по Европе.

select name from world
where gdp =(select MAX(gdp) from world
where continent ='Europe')


и Вы уверены, что таких значений нет и Ваш запрос возвращает то, что нужно?

+1 qwerty112 , скорее проблема в типе поля, сам запрос корректный

Да, извиняюсь. Ошибка перевода (моя). Нужна страна, где gdp больше, чем во всех странах Европы.
И да, скорее всего строковый тип.
Так выдаёт правильный результат, если gdp - строка.

select name from world
where CONVERT(bigint,gdp) > ALL
(select CONVERT(bigint,gdp) from world
where continent ='Europe')


p.S. Утром не проснулся видимо ещё) Извиняюсь:)
2 июл 13, 09:38    [14508295]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение на вложенный SELECT  [new]
skleppi
Member

Откуда:
Сообщений: 170
Поле gdp - числовое. Выполнила запрос

select continent , sum(gdp) from world
group by continent 


Результат:

Africa 1834184000000
Asia 23904885000000
Europe 19949620000000
North America 18436452000000
Oceania 1537932000000
South America 4164652000000
2 июл 13, 09:42    [14508327]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение на вложенный SELECT  [new]
skleppi
Member

Откуда:
Сообщений: 170
Сергей Викт.,
такой запрос тоже вернул пусто :(
2 июл 13, 09:43    [14508337]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение на вложенный SELECT  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
skleppi
Поле gdp - числовое. Выполнила запрос

select continent , sum(gdp) from world
group by continent 


Результат:

Africa 1834184000000
Asia 23904885000000
Europe 19949620000000
North America 18436452000000
Oceania 1537932000000
South America 4164652000000

А возможен ли вариант, что gdp в какой-то из стран Европы больше всех существующих?

Что вернёт запрос:

SELECT name,MAX(gdp) FROM world group by name order by 2 DESC
2 июл 13, 09:46    [14508367]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение на вложенный SELECT  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Сергей Викт.
skleppi
Поле gdp - числовое. Выполнила запрос

select continent , sum(gdp) from world
group by continent 


Результат:

Africa 1834184000000
Asia 23904885000000
Europe 19949620000000
North America 18436452000000
Oceania 1537932000000
South America 4164652000000

А возможен ли вариант, что gdp в какой-то из стран Европы больше всех существующих?

Что вернёт запрос:

SELECT name,MAX(gdp) FROM world group by name order by 2 DESC


РРРРР, не тот запрос вставил опять.

SELECT continent,MAX(gdp) FROM @t group by continent order by 2 DESC
2 июл 13, 09:49    [14508394]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение на вложенный SELECT  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3274
Мне кажется, в данном случае налицо проблема неправильного понимания вопроса. Может, имеется в виду "больше, чем у любой страны в Европе"?

Тогда оригинальный запрос ТС подойдет, только ALL заменить на ANY.
2 июл 13, 09:56    [14508452]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение на вложенный SELECT  [new]
qwerty112
Guest
Ennor Tiegael
Мне кажется, в данном случае налицо проблема неправильного понимания вопроса. Может, имеется в виду "больше, чем у любой страны в Европе"?

Тогда оригинальный запрос ТС подойдет, только ALL заменить на ANY.

неее, как раз ваше предложение - "неправильное понимание вопроса" :)

больше, чем у любой страны в Европе ==> ALL
больше, чем у какой-либо страны в Европе ==> ANY
2 июл 13, 09:59    [14508479]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение на вложенный SELECT  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Если таблица отсюда:
http://sqlzoo.net/wiki/SELECT_within_SELECT_Tutorial
То запрос ТС

select name from world
where gdp > ALL
(select gdp from world
where continent ='Europe')

Возвращает:
Afghanistan
Algeria
Angola


Это если данных первые 5 строк из таблицы.
2 июл 13, 10:05    [14508521]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение на вложенный SELECT  [new]
qwerty112
Guest
qwerty112
Ennor Tiegael
Мне кажется, в данном случае налицо проблема неправильного понимания вопроса. Может, имеется в виду "больше, чем у любой страны в Европе"?

Тогда оригинальный запрос ТС подойдет, только ALL заменить на ANY.

неее, как раз ваше предложение - "неправильное понимание вопроса" :)

больше, чем у любой страны в Европе ==> ALL
больше, чем у какой-либо страны в Европе ==> ANY

или вы имеете в виду неправильное понимание (перевод) исх.задания ?
ТЗ
И запрос -Which countries have a GDP greater than any country in Europe? [Give the name only.]


с этим "бяда" :)
Google перевёл так
В каких странах больше ВВП, чем любая страна в Европе?

Promt - так
У каких стран есть ВВП, больше, чем какая-либо страна в Европе?

:))
2 июл 13, 10:08    [14508530]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение на вложенный SELECT  [new]
skleppi
Member

Откуда:
Сообщений: 170
Сергей Викт.
Сергей Викт.
пропущено...

А возможен ли вариант, что gdp в какой-то из стран Европы больше всех существующих?

Что вернёт запрос:

SELECT name,MAX(gdp) FROM world group by name order by 2 DESC


РРРРР, не тот запрос вставил опять.

SELECT continent,MAX(gdp) FROM @t group by continent order by 2 DESC


Запрос вернет вот что:

Africa	408237000000
Oceania	1371764000000
South America	2476652000000
Europe	3570556000000
Asia	7318499000000
North America	15094000000000
2 июл 13, 10:08    [14508533]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение на вложенный SELECT  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
skleppi
Сергей Викт.
пропущено...


РРРРР, не тот запрос вставил опять.

SELECT continent,MAX(gdp) FROM @t group by continent order by 2 DESC


Запрос вернет вот что:

Africa	408237000000
Oceania	1371764000000
South America	2476652000000
Europe	3570556000000
Asia	7318499000000
North America	15094000000000

Не понимаю.. у меня корректно отрабатывает Ваш запрос...
А что вернёт
PRINT @@VERSION
2 июл 13, 10:18    [14508608]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение на вложенный SELECT  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2995
skleppi,
на том сайте хитрецы, они значение NULL впихнули и поэтому корректный с точки зрения запрос, возвращает не правильный результат

select w.name from world w
where w.gdp > all
(select isnull(w1.gdp, 0) from world w1
where w1.continent ='Europe')
2 июл 13, 10:24    [14508671]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение на вложенный SELECT  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
HandKot
skleppi,
на том сайте хитрецы, они значение NULL впихнули и поэтому корректный с точки зрения запрос, возвращает не правильный результат

select w.name from world w
where w.gdp > all
(select isnull(w1.gdp, 0) from world w1
where w1.continent ='Europe')

А я не могу там найти данные этой таблицы..:( Вижу ток 5 строк первых:)
2 июл 13, 10:25    [14508681]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение на вложенный SELECT  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
HandKot
skleppi,
на том сайте хитрецы, они значение NULL впихнули и поэтому корректный с точки зрения запрос, возвращает не правильный результат

select w.name from world w
where w.gdp > all
(select isnull(w1.gdp, 0) from world w1
where w1.continent ='Europe')
Если корректный запрос не учитывает значения NULL,
то это некорректный запрос!
2 июл 13, 10:26    [14508689]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение на вложенный SELECT  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 2995
iap
HandKot
skleppi,
на том сайте хитрецы, они значение NULL впихнули и поэтому корректный с точки зрения запрос, возвращает не правильный результат

select w.name from world w
where w.gdp > all
(select isnull(w1.gdp, 0) from world w1
where w1.continent ='Europe')
Если корректный запрос не учитывает значения NULL,
то это некорректный запрос!


ну там же не сказано, что поле может принимать значение нулл
а так да, согласен

ЗЫж я стараюсь их по-реже использовать, чтобы не попадать на такое
2 июл 13, 10:30    [14508725]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение на вложенный SELECT  [new]
skleppi
Member

Откуда:
Сообщений: 170
HandKot
skleppi,
на том сайте хитрецы, они значение NULL впихнули и поэтому корректный с точки зрения запрос, возвращает не правильный результат

select w.name from world w
where w.gdp > all
(select isnull(w1.gdp, 0) from world w1
where w1.continent ='Europe')


да, так работает. я и не подозревала про null...
Спасибо!!
2 июл 13, 10:47    [14508847]     Ответить | Цитировать Сообщить модератору
 Re: Упражнение на вложенный SELECT  [new]
Гость333
Member

Откуда:
Сообщений: 3683
skleppi
да, так работает. я и не подозревала про null...
Спасибо!!

На том сайте можно выполнить любую выборку, например
select *
from world
where continent = 'Europe'
и посмотреть результат:
namecontinentareapopulationgdpflag
Albania Europe 28748 2831741 12960000000 al.png
Andorra Europe 468 78115 3712000000 ad.png
Armenia Europe 29743 3275700 10248000000 am.png
..................
Vatican City Europe 0 800 null va.png
2 июл 13, 10:53    [14508897]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить