SQLzoo,SELECT教程中的SELECT

时间:2013-09-09 10:09:16

标签: sql

我目前正在做本教程(http://sqlzoo.net/wiki/SELECT_within_SELECT_Tutorial),我无法回答问题8:

有些国家的人口数量是其邻国(在同一大洲)的三倍以上。给国家和大陆。

..我的当前查询不会被接受为答案:

SELECT x.name, x.continent FROM world x
WHERE (x.population * 3) > ALL (
SELECT y.population FROM world y
WHERE x.continent = y.continent )

我做错了什么?答案是什么?

2 个答案:

答案 0 :(得分:3)

您的查询的问题是您不会从内部查询的结果中排除“更大”的国家/地区本身。正确的查询是:

SELECT x.name, x.continent
FROM world x
WHERE x.population > ALL(
    SELECT (y.population*3)
    FROM world y
    WHERE x.continent=y.continent
    AND x.name<>y.name
)

请注意内部查询中的最后一个条件,即我通过x.name<>y.name从“y”国家/地区列表中排除“x”国家/地区。如果没有这样做,结果中将不会返回任何行。

P.S。通常,使用id字段排除外部实体与内部查询中的实体列表的“排除”,但sqlzoo上的表没有id字段。

答案 1 :(得分:0)

简单答案:

Select name, continent
From world x
Where population > all(Select max(population)*3 From world y Where x.continent = y.continent AND y.name != x.name)