-1

我有一个这样的表(取自sqlzoo.net),

+-------------+-----------+------------+------------+-------------------+
| name        | continent | area       | population | gdp               |
+-------------+-----------+------------+------------+-------------------+
| Afghanistan | Asia      | 652230.000 |   25500100 | 20343000000.00000 |
| Albania     | Europe    |  28748.000 |    2831741 | 12960000000.00000 |
+-------------+-----------+------------+------------+-------------------+
...

查询是,

查找属于所有人口少于 25000000 的大陆的每个国家。显示名称、大陆和人口

我打破了如下查询,

  • 查找所有人口少于 25000000 的所有大陆(子查询
  • 显示来自这些大陆的国家(外部查询)的详细信息(名称、大陆和人口) 。

当我尝试编写查询时,我最终会这样,

外部查询似乎很好,

select name,continent,population from world where continent IN

内部查询让我感到困惑。

 (select continent from world where population<25000000) 

这是不正确的,因为它没有检查一个大陆内的所有人口是否都满足约束(我想检查一个大陆内的所有行,如果所有行都满足,包括IN列表中的大陆名称)。//我知道我可以在C// 我如何在 SQL 中做到这一点?

注意:如果有有用的链接,请务必包含它们。解释查询如何执行的见解(如“ forC 中的循环如何工作 - 分配、增量、检查、循环”这样清晰的内容)将非常有帮助

4

4 回答 4

3

补充 fthiella 出色答案的另一种选择:

SELECT name, continent, population FROM world w1
WHERE 25000000 > ALL (
    SELECT population FROM world
    WHERE w1.continent = continent)
于 2013-06-17T14:22:54.733 回答
2

您可以使用这样的查询:

SELECT name, continent, population
FROM   world
WHERE  continent IN (SELECT continent
                     FROM   world
                     GROUP BY continent
                     HAVING COUNT(*)=SUM(population<25000000))

子查询将仅返回所有国家人口少于 25000000 的大陆。

COUNT(*)将是每个大陆的所有行的计数(如果没有重复,它将是该大陆所有国家的计数)。

SUM(population<25000000)将是人口少于 25000000 的大陆的计数,因为如果条件为真,人口<25000000 将返回 1,否则返回 0。

或者你也可以使用这个:

SELECT name, continent, population
FROM   world
WHERE  NOT EXISTS (SELECT NULL FROM world w1
                   WHERE w1.continent = world.continent
                         AND population>25000000)
于 2013-06-17T14:09:16.957 回答
0

我似乎已经通过在线谷歌搜索登陆了作弊页面

它说,

SELECT name,continent,population FROM world x
  WHERE 25000000 >= ALL (
    SELECT population FROM world y
     WHERE x.continent=y.continent
       AND y.population>0)

把它放在这里给任何提到这个问题的人

于 2013-06-17T14:26:54.393 回答
0

试试这个:

select name, continent, population
from world x
where continent in (select continent
from world
group by continent
having max(population) <= 25000000)
于 2019-05-12T06:18:45.467 回答