2014-10-22 2 views
0

Итак, я пытаюсь сделать вложенный выборочный запрос с арифметикой в ​​нем, чтобы ответить на следующее: «Покажите страны Европы с ВВП на душу населения больше, чем« Соединенное Королевство ».Как обрабатывать этот вложенный запрос выбора с помощью арифметики?

Я пытаюсь что-то вроде ниже с прилагаемой таблице в SQL (двигатель MYSQL)

SELECT name FROM world WHERE continent='Europe' AND gdp/population > (SELECT gdp/population FROM world WHERE name='United Kingdom') 

+-----------------+-----------+---------+------------+--------------+ 
|  name  | continent | area | population |  gdp  | 
+-----------------+-----------+---------+------------+--------------+ 
|  Japan  | Asia  | 652230 | 25500100 | 20343000000 | 
|  Albania  | Europe | 28748 | 2831741 | 12960000000 | 
|  Morocco  | Africa | 2381741 | 37100000 | 188681000000 | 
|  Andorra  | Europe |  468 |  78115 | 3712000000 | 
|  Angola  | Africa | 1246700 | 20609294 | 100990000000 | 
+-----------------+-----------+---------+------------+--------------+ 

Я получаю синтаксическую ошибку - что такое правильный способ, чтобы написать это и то, что я делаю неправильно? Я пытаюсь улучшить SQL.

+0

Вы забыли цитатой на 'name = 'United Kingdom''' –

ответ

1

Отсутствующие цитаты в конце SQL запроса:

SELECT name 
FROM world 
WHERE continent='Europe' AND 
     gdp/population > (SELECT gdp/population FROM world WHERE name='United Kingdom') 
                       ^
2

Вы забыли цитату

изменение

name='United Kingdom 

в

name='United Kingdom' 
0

Вы можете использовать присоединяется вместо выполнение подзапроса в качестве RDBMS может создать план выполнения, который лучше для вашего запроса, и может предсказать, какие данные должны быть загружены для обработки, и сэкономить время, в отличие от подзапроса, где он будет запускать все запросы и загружать все свои данные для обработки. Запрос будет выглядеть следующим образом.

SELECT w1.* from world w1 join world w2 
where w2.name ='uk' 
and w1.gdp/w1.pop > w2.gdp/w2.pop 
and w1.continent='Europe' and w2.continent='Europe' 
Смежные вопросы