You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

子查询问题求助:筛选全洲国家人口≤2500万的国家信息

解决子查询筛选符合条件大洲及国家的问题

我来帮你搞定这个SQL问题!你的需求是找出所有国家人口都≤25000000的大洲,然后列出这些大洲对应的所有国家(展示name、continent、population),先看看你原语句的问题,再给你几个靠谱的写法:

原SQL的问题分析

你的语句是:

select continent, name, population from world x where name = all(select name from world y where y.continent=x.continent and population<2500000 and population>0)

这里有两个关键错误:

  • 人口阈值写错了:你要的是≤25000000,但子查询里写成了<2500000(少了一个0),直接缩小了筛选范围;
  • 逻辑判断错误:name = all(...)的意思是「当前国家的名字等于子查询返回的所有名字」,这只有当该大洲只有一个国家时才可能满足,完全不符合你要的「该大洲所有国家人口都达标」的逻辑。

正确的写法

方法1:用NOT EXISTS(最直观)

思路:对于每个国家,判断它所在的大洲里,不存在任何人口超过25000000的国家,这样就保证了整个大洲的国家都符合要求。

SELECT name, continent, population
FROM world x
WHERE NOT EXISTS (
    -- 子查询:找当前大洲里人口超标的国家
    SELECT 1
    FROM world y
    WHERE y.continent = x.continent
      AND y.population > 25000000
)

方法2:用GROUP BY + HAVING先筛选大洲

思路:先通过分组找出「所有国家人口最大值≤25000000」的大洲,再关联原表取出这些大洲的所有国家。

SELECT w.name, w.continent, w.population
FROM world w
JOIN (
    -- 先筛选符合条件的大洲
    SELECT continent
    FROM world
    GROUP BY continent
    HAVING MAX(population) <= 25000000
) valid_continents ON w.continent = valid_continents.continent

这两种写法都能准确返回你需要的结果,选哪种都可以,NOT EXISTS的写法在很多数据库里性能也不错~

内容的提问来源于stack exchange,提问作者user

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:50:36