5

我目前正在做这个教程(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 )

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

4

3 回答 3

6

您的查询的问题是您没有从内部查询的结果中排除“更大”的国家本身。正确的查询是:

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
)

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

PS 通常内部查询实体列表中“排除”外部实体是通过使用id字段来排除的,但是上表sqlzoo没有id字段。

于 2013-09-09T10:24:15.537 回答
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)
于 2020-07-05T20:15:31.510 回答
0

此查询不使用相关子查询。它使用子查询,其中世界表与生成大陆的子查询相连接,其对应的第二高区域乘以 3。请注意,在连接条件中已经处理了这些子句。

select a.name, 
   a.continent
from world a
inner join ( select a.continent, max(3*a.population) as population 
         from world a
         inner join (select continent, max(3*population)as population 
                    from world group by continent)b
         on a.continent=b.continent
         and 3*a.population <> b.population 
         group by a.continent
)b
on a.continent=b.continent
and a.population> b.population
于 2022-02-22T09:53:54.330 回答