如何使用算术处理这个嵌套的选择查询?

时间:2014-10-22 06:38:05

标签: mysql sql

所以我试图在其中使用算术进行嵌套选择查询来回答以下问题:"显示欧洲人均GDP大于'英国' "

我尝试使用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。

3 个答案:

答案 0 :(得分:2)

你忘记了引用

变化

name='United Kingdom

name='United Kingdom'

答案 1 :(得分:1)

SQL查询结束时缺少引号:

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

答案 2 :(得分: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'