我目前正在做本教程(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 )
我做错了什么?答案是什么?
答案 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)